三分钟折纸 發表於 2023-9-4 00:00:00

消息队列服务rabbitmq安装配置

<p>一. 安装erlang<br>
Rabbitmq基于erlang语言开发,因此需要安装erlang虚拟机<br>
1.通过yum安装</p><pre class="brush:bash;toolbar:false"># wget -O /etc/yum.repos.d/epel-erlang.repo http://repos.fedorapeople.org/repos/peter/erlang/epel-erlang.repo
# yum install erlang</pre><p>2.通过源码包安装</p><pre class="brush:bash;toolbar:false"># yum install ncurses-devel.x86_64
# wget http://www.erlang.org/download/otp_src_R16B01.tar.gz
# tar zxvf otp_src_R16B01.tar.gz
# ./configure --prefix=/usr/local/erlang_R16B01 --enable-halfword-emulator --enable-m64-build
# make
# make instal</pre><p>二. 安装rabbitmq<br>
1. 通过yum安装</p><pre class="brush:bash;toolbar:false"># rpm -Uvh http://mirrors.sohu.com/fedora-epel/5/x86_64/epel-release-5-4.noarch.rpm
# rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
# yum install rabbitmq-server-3.1.1-1.noarch.rpm</pre><p>2. 通过源码包安装<br>
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.1.3/rabbitmq-server-generic-unix-3.1.3.tar.gz //免安装包,解压就可以用了</p>
<p>三. 配置<br>
/usr/local/rabbitmq/sbin目录下<br>
rabbitmq-env 环境配置<br>
rabbitmq-defaults 默认参数设置<br>
rabbitmqctl 管理工具<br>
rabbitmq-plugins 插件管理工具<br>
rabbitmq-server rabbitmq服务</p>
<p># vim rabbitmq-defaults</p><pre class="brush:bash;toolbar:false">SYS_PREFIX=${RABBITMQ_HOME}
ERL_DIR=/usr/local/erlang/bin/ //设置erl命令路径
CLEAN_BOOT_FILE=start_clean
SASL_BOOT_FILE=start_sasl
CONFIG_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq //设置rabbitmq运行参数
LOG_BASE=${SYS_PREFIX}/var/log/rabbitmq
MNESIA_BASE=${SYS_PREFIX}/var/lib/rabbitmq/mnesia
ENABLED_PLUGINS_FILE=${SYS_PREFIX}/etc/rabbitmq/enabled_plugins //允许插件列表配置文件
PLUGINS_DIR="${RABBITMQ_HOME}/plugins"
CONF_ENV_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq-env.conf</pre><p>主要配置文件<br>
1. enabled_plugins:设置允许的插件列表,格式如下:</p><pre class="brush:bash;toolbar:false">[rabbitmq_jsonrpc_channel,
rabbitmq_jsonrpc_channel_examples,
rabbitmq_management,
rabbitmq_management_visualiser,
rabbitmq_tracing].</pre><p>2. rabbitmq.config:设置rabbitmq运行参数。结构为hash数组格式。如</p><pre class="brush:bash;toolbar:false">[
{mnesia, [{dump_log_write_threshold, 1000}]},
{rabbit, [{vm_memory_high_watermark, 0.4}]}
{rabbitmq_management,
[{listener, [{port, 55673},
{ip, "0.0.0.0"}
]}
]}
].</pre><p>其中几个关键参数为:<br>
tcp_listerners 设置rabbimq的监听端口,默认为。<br>
disk_free_limit 磁盘低水位线,若磁盘容量低于指定值则停止接收数据,默认值为{mem_relative, 1.0},即与内存相关联1:1,也可定制为多少byte.<br>
vm_memory_high_watermark,设置内存低水位线,若低于该水位线,则开启流控机制,默认值是0.4,即内存总量的40%。<br>
hipe_compile 将部分rabbimq代码用High Performance Erlang compiler编译,可提升性能,该参数是实验性,若出现erlang vm segfaults,应关掉。<br>
force_fine_statistics, 该参数属于rabbimq_management,若为true则进行精细化的统计,但会影响性能。<br>
/usr/local/etc/rabbitmq/rabbitmq.config<br>
[{auth_backends,},<br>
{auth_mechanisms,['PLAIN','AMQPLAIN']},<br>
{backing_queue_module,rabbit_variable_queue},<br>
{cluster_nodes,[]},<br>
{collect_statistics,fine},<br>
{collect_statistics_interval,5000},<br>
{default_permissions,[&lt;&lt;".*"&gt;&gt;,&lt;&lt;".*"&gt;&gt;,&lt;&lt;".*"&gt;&gt;]},<br>
{default_user,&lt;&lt;"guest"&gt;&gt;},<br>
{default_user_tags,},<br>
{default_vhost,&lt;&lt;"/"&gt;&gt;},<br>
{delegate_count,16},<br>
{error_logger,{file,"/usr/local/var/log/rabbitmq/rabbit@Technophiliac.log"}},<br>
{frame_max,131072},<br>
{hipe_compile,false},<br>
{included_applications,[]},<br>
{msg_store_file_size_limit,16777216},<br>
{msg_store_index_module,rabbit_msg_store_ets_index},<br>
{queue_index_max_journal_entries,262144},<br>
{sasl_error_logger,{file,"/usr/local/var/log/rabbitmq/rabbit@Technophiliac-sasl.log"}},<br>
{server_properties,[]},<br>
{ssl_listeners,[]},<br>
{ssl_options,[]},<br>
{tcp_listen_options,<br>
[binary,<br>
{packet,raw},<br>
{reuseaddr,true},<br>
{backlog,128},<br>
{nodelay,true},<br>
{exit_on_close,false}]},<br>
{tcp_listeners,},<br>
{trace_vhosts,[&lt;&lt;"/"&gt;&gt;]},<br>
{vm_memory_high_watermark,0.4}]<br>
3. rabbitmq-env.conf rabbitmq环境参数配置</p><pre class="brush:bash;toolbar:false">RABBITMQ_NODENAME=FZTEC-240088 节点名称
RABBITMQ_NODE_IP_ADDRESS=127.0.0.1 监听IP
RABBITMQ_NODE_PORT=5672 监听端口
RABBITMQ_LOG_BASE=/data/rabbitmq/log 日志目录
RABBITMQ_PLUGINS_DIR=/data/rabbitmq/plugins 插件目录
RABBITMQ_MNESIA_BASE=/data/rabbitmq/mnesia 后端存储目录</pre><p>更详细的配置参见: http://www.rabbitmq.com/configure.html#configuration-file</p>
<p>4. 启动</p><pre class="brush:bash;toolbar:false"># /usr/local/rabbitmq/sbin/rabbitmq-server -detached</pre><p>四. rabbitmq插件管理<br>
启用rabbitmq web管理插件</p><pre class="brush:bash;toolbar:false"># ./rabbitmq-plugins enable rabbitmq_management</pre><p>列出所有插件</p><pre class="brush:bash;toolbar:false"># ./rabbitmq-plugins list</pre><p>五. 安装php的rabbitmq扩展</p><pre class="brush:bash;toolbar:false"># yum install librabbitmq-devel.x86_64
# wget http://pecl.php.net/get/amqp-1.2.0.tgz
# tar zxvf amqp-1.2.0.tgz
# cd amqp-1.2.0
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --with-amqp
# make
# make install
# vim /usr/local/php/etc/php.ini
extension=amqp.so
# /usr/local/php/sbin/php-fpm -y /usr/local/php/etc/php-fpm.conf</pre><p>六. php操作实例<br>
1. 创建队列</p><pre class="brush:bash;toolbar:false">&lt;?php
//连接RabbitMQ
$conn_args = array( 'host'=&gt;'10.31.247.202' , 'port'=&gt; '5672', 'login'=&gt;'guest' , 'password'=&gt; 'guest','vhost' =&gt;'/');
$conn = new AMQPConnection($conn_args);
$conn-&gt;setTimeout(1);
$conn-&gt;connect();
//创建exchange名称和类型
$channel = new AMQPChannel($conn);
$ex = new AMQPExchange($channel);
$ex-&gt;setName('ttlsa_exchange');
$ex-&gt;setType(AMQP_EX_TYPE_DIRECT);
$ex-&gt;setFlags(AMQP_DURABLE | AMQP_AUTODELETE);
$ex-&gt;declare();
//创建queue名称,使用exchange,绑定routingkey
$q = new AMQPQueue($channel);
$q-&gt;setName('ttlsa_queue');
$q-&gt;setFlags(AMQP_DURABLE | AMQP_AUTODELETE);
$q-&gt;declare();
$q-&gt;bind('ttlsa_exchange', 'ttlsa_routingkey');
//消息发布
$channel-&gt;startTransaction();
$message = json_encode(array('Hello World!','DIRECT'));
$ex-&gt;publish($message, 'ttlsa_routingkey');
$channel-&gt;commitTransaction();
$conn-&gt;disconnect();
?&gt;</pre><p>2. 获取队列信息</p><pre class="brush:bash;toolbar:false">&lt;?php
//连接RabbitMQ
$conn_args = array( 'host'=&gt;'10.31.247.202' , 'port'=&gt; '5672', 'login'=&gt;'guest' , 'password'=&gt; 'guest','vhost' =&gt;'/');
$conn = new AMQPConnection($conn_args);
$conn-&gt;connect();
//设置queue名称,使用exchange,绑定routingkey
$channel = new AMQPChannel($conn);
$q = new AMQPQueue($channel);
$q-&gt;setName('ttlsa_queue');
$q-&gt;setFlags(AMQP_DURABLE | AMQP_AUTODELETE);
$q-&gt;declare();
$q-&gt;bind('ttlsa_exchange', 'ttlsa_routingkey');
//消息获取
$messages = $q-&gt;get(AMQP_AUTOACK) ;
if ($messages){
var_dump(json_decode($messages-&gt;getBody(), true ));
}
$conn-&gt;disconnect();
?&gt;</pre><p>执行后输出信息如下:<br>
array(2) {<br>
=&gt;<br>
string(12) "Hello World!"<br>
=&gt;<br>
string(6) "DIRECT"<br>
}</p>
<p>七. 查看队列信息<br>
1. 查看exchange信息</p><pre class="brush:bash;toolbar:false"># /usr/local/rabbitmq/sbin/rabbitmqctl list_exchanges name type durable auto_delete arguments
Listing exchanges ...
direct true false []
amq.direct direct true false []
amq.fanout fanout true false []
amq.headers headers true false []
amq.match headers true false []
amq.rabbitmq.log topic true false []
amq.rabbitmq.trace topic true false []
amq.topic topic true false []
ttlsa_exchange direct true false []
...done.</pre><p>2. 查看队列信息</p><pre class="brush:bash;toolbar:false"># /usr/local/rabbitmq/sbin/rabbitmqctl list_queues name durable auto_delete messages consumers memory
Listing queues ...
ttlsa_queue true true 1 0 7244
...done.</pre><p>3. 查看绑定信息</p><pre class="brush:bash;toolbar:false"># /usr/local/rabbitmq/sbin/rabbitmqctl list_bindings
Listing bindings ...
exchange ttlsa_queue queue ttlsa_queue []
ttlsa_exchange exchange ttlsa_queue queue ttlsa_routingkey []
...done.</pre><p>八. 日志轮转</p><pre class="brush:bash;toolbar:false"># /usr/local/rabbitmq/sbin/rabbitmqctl rotate_logs .1</pre>
頁: [1]
查看完整版本: 消息队列服务rabbitmq安装配置