使用源码安装
1.下载 erlang 和 ncurses
wget https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.1.tar.gz
wget http://erlang.org/download/otp_src_20.3.tar.gz
#安装ncurses:
tar -zxvf ncurses-6.1.tar.gz
cd ncurses-6.1
./configure --with-shared --prefix=/usr
make
make install
#安装erlang
tar -xvf otp_src_20.3.tar.gz
cd /home/erlang/otp_src_20.3
./configure --prefix=/usr/local/erlang
make -j 4
make install -j 4
#erlang加入PATH变量
vi /etc/profile
#set erlang environment
export PATH=$PATH:/usr/local/erlang/bin
#使配置生效
source /etc/profile
执行命令:erl
缺省安装路径: /usr/local/bin/erl
遇到的问题,需要升级
openssl
,同时编译的时候需要加上安装的openssl
的目录
线上版本为:
# localhost:/home/software/otp_src_20.3 # openssl version
# OpenSSL 0.9.8j-fips 07 Jan 2009
# 升级openssl
# cd /usr/local/
# wget http://www.openssl.org/source/openssl-1.0.1s.tar.gz
# tar -zxvf openssl-1.0.1s.tar.gz
# cd openssl-1.0.1s
# ./config --prefix=/usr/local/openssl
# vim Makefile
--修改CFLAG= -DOPENSSL_THREADS 修改成 CFLAG= -fPIC -DOPENSSL_THREADS
--也就是添加 -fPIC
# make && make install
# 修改编译的语句为:
# ./configure --with-ssl=/usr/local/openssl --prefix=/usr/local/erlang --without-javac
2.安装rabbitmq
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.15/rabbitmq-server-generic-unix-3.6.15.tar.xz
xz -d rabbitmq-server-generic-unix-3.6.15.tar.xz
tar -xvf rabbitmq-server-generic-unix-3.6.15.tar
#RabbitMQ加入PATH变量
vi /etc/profile
#set rabbitmq environment
export PATH=$PATH:/home/hcicloud/rabbitmq_server-3.6.15/sbin
#使配置生效
source /etc/profile
#服务启动关闭
启动:rabbitmq-server -detached
关闭:rabbitmqctl stop
以下是启动日志,可以看到默认的日志文件位置和配置文件位置
=INFO REPORT==== 21-Oct-2019::10:50:05 ===
node : rabbit@localhost
home dir : /root
config file(s) : /usr/local/rabbitmq/etc/rabbitmq/rabbitmq.config (not found)
cookie hash : dozkWKJtxOBHay1RgIwfGA==
log : /usr/local/rabbitmq/var/log/rabbitmq/[email protected]
sasl log : /usr/local/rabbitmq/var/log/rabbitmq/[email protected]
database dir : /usr/local/rabbitmq/var/lib/rabbitmq/mnesia/rabbit@localhost
#启动命令(以下内容参考朱小厮的rabbitmq)
#服务启动关闭
启动(rabbitmq分别启动节点和应用):rabbitmq-server -detached
关闭(应用和节点都将被关闭):rabbitmqctl stop
#集群配置相关命令
#应用启动
rabbitmqctl start_app
#应用关闭
rabbitmqctl stop_app
rabbitmqctl reset
#在当前集群中加入某节点:rabbitmqctl join_cluster {rabbit_node_name} (某些低版本可以采用rabbitmqctl cluster {rabbit_node_name})
集群状态:rabbitmqctl cluster_status
将某节点剔除出当前集群:rabbitmqctl forget_cluster_node {rabbit_node_name}
3.启动web管理插件
rabbitmq-plugins enable rabbitmq_management
错误一:User can only in via localhsot.
解决方式:
将:{loopback_users, [<<”guest”>>]},
改为:{loopback_users, []}
4.集群搭建
1 读取其中一个节点的cookie, 并复制到其他节点(节点之间通过cookie确定相互是否可通信)。
cookie存放在/var/lib/rabbitmq/.erlang.cookie或者$HOME/.erlang.cookie中
2 配置各节点的hosts文件( vim /etc/hosts)
xxx.xxx.xxx.xxx hidden1
xxx.xxx.xxx.xxx hidden2
xxx.xxx.xxx.xxx hidden3
3 以hidden1为主节点,在hidden2上:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@hidden1
rabbitmqctl start_app
hidden3上的操作与hidden2的雷同。
最后通过rabbitmqctl cluster_status查看集群的状态信息:
linux:~ # rabbitmqctl cluster_status
Cluster status of node rabbit@linux
[{nodes,[{disc,[rabbit@PACTI,rabbit@linux,rabbit@localhost]}]},
{running_nodes,[rabbit@PACTI,rabbit@localhost,rabbit@linux]},
{cluster_name,<<"rabbit@linux">>},
{partitions,[]},
{alarms,[{rabbit@PACTI,[]},{rabbit@localhost,[nodedown]},{rabbit@linux,[]}]}]
这里有一个节点是:nodedown,因为修改host后,没有重启导致的,先不管。
5.镜像队列设置
# 对队列名称以text_analysis开头的所有队列和 exchange 进行镜像,并在集群中全部节点完成
rabbitmqctl set_policy text_analysis “^text_analysis” '{"ha-mode":"all"}'
命令说明:
镜像队列的配置通过添加policy完成,policy添加的命令为:
rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]
-p Vhost: 可选参数,针对指定vhost下的queue进行设置
Name: policy的名称
Pattern: queue的匹配模式(正则表达式)
Definition: 镜像定义,包括三个部分 ha-mode,ha-params,ha-sync-mode
ha-mode: 指明镜像队列的模式,有效值为 all/exactly/nodes
all表示在集群所有的节点上进行镜像
exactly表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
nodes表示在指定的节点上进行镜像,节点名称通过ha-params指定
ha-params: ha-mode模式需要用到的参数
ha-sync-mode: 镜像队列中消息的同步方式,有效值为automatic,manually
Priority: 可选参数, policy的优先级
————————————————
版权声明:本文为部分内容参考「朱小厮」的原创文章
RabbitMQ常用命令
6.延迟队列
(1)下载延迟插件
https://www.rabbitmq.com/community-plugins.html
注意:支持RabbitMQ 3.5.8及更高版本
(2)将解压后的ez结尾的文件放到/rabbitmq/plugins/目录下
(3)输入rabbitmq-plugins list查看延迟插件是否存在
[root@hcicloud plugins]# rabbitmq-plugins list
Listing plugins with pattern ".*" ...
Configured: E = explicitly enabled; e = implicitly enabled
| Status: * = running on rabbit@hcicloud
|/
[ ] rabbitmq_amqp1_0 3.7.17
[ ] rabbitmq_auth_backend_cache 3.7.17
[ ] rabbitmq_auth_backend_http 3.7.17
[ ] rabbitmq_auth_backend_ldap 3.7.17
[ ] rabbitmq_auth_mechanism_ssl 3.7.17
[ ] rabbitmq_consistent_hash_exchange 3.7.17
[E*] rabbitmq_delayed_message_exchange 20171201-3.7.x
[ ] rabbitmq_event_exchange 3.7.17
[ ] rabbitmq_federation 3.7.17
[ ] rabbitmq_federation_management 3.7.17
[ ] rabbitmq_jms_topic_exchange 3.7.17
[E*] rabbitmq_management 3.7.17
[e*] rabbitmq_management_agent 3.7.17
[ ] rabbitmq_mqtt 3.7.17
[ ] rabbitmq_peer_discovery_aws 3.7.17
[ ] rabbitmq_peer_discovery_common 3.7.17
[ ] rabbitmq_peer_discovery_consul 3.7.17
[ ] rabbitmq_peer_discovery_etcd 3.7.17
[ ] rabbitmq_peer_discovery_k8s 3.7.17
[ ] rabbitmq_random_exchange 3.7.17
[ ] rabbitmq_recent_history_exchange 3.7.17
[ ] rabbitmq_sharding 3.7.17
[ ] rabbitmq_shovel 3.7.17
[ ] rabbitmq_shovel_management 3.7.17
[ ] rabbitmq_stomp 3.7.17
[ ] rabbitmq_top 3.7.17
[ ] rabbitmq_tracing 3.7.17
[ ] rabbitmq_trust_store 3.7.17
[e*] rabbitmq_web_dispatch 3.7.17
[ ] rabbitmq_web_mqtt 3.7.17
[ ] rabbitmq_web_mqtt_examples 3.7.17
[ ] rabbitmq_web_stomp 3.7.17
[ ] rabbitmq_web_stomp_examples 3.7.17
(4)启用延迟插件
# 启动
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
# 关闭
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
访问可视化界面,有如下则说明启动成功
查看新建的exchange,同时绑定队列到exchange
(5)生产者发送消息到延迟,test_delayed_exchange
队列上在30秒后看到发送的数据
部分代码示例:
/**
* 携带头部信息的发送到队列中
* @param message
* @throws Exception
*/
public void send3(Object message) throws Exception {
String str = message.toString();
org.springframework.amqp.core.Message message1 = org.springframework.amqp.core.MessageBuilder.withBody(str.getBytes())
.setContentType(MessageProperties.CONTENT_TYPE_TEXT_PLAIN)
.setContentEncoding("utf-8")
.setMessageId(UUID.randomUUID()+"")
.setHeader("x-delay", 1000 * 30)
.build();
//id + 时间戳 全局唯一
CorrelationData correlationData = new CorrelationData("1234567890");
rabbitTemplate.convertAndSend("test_delayed_exchange", "test_delayed", message1, correlationData);
}
7.安装包下载地址:
链接:https://pan.baidu.com/s/1eD6sZNcI_dlUHgbHgwa0bQ 密码:e2jd