Rabbitmq是消息中间件,它是Erlang语言开发的,充分地利用erlang的分布式特性,通常以集群方式部署,主要提供消息的接受和发送,实现各微服务之间的消息异步。
1、安装依赖包
yum install -y *epel* gcc-c++ unixODBC unixODBC-devel openssl-devel ncurses-devel xz
2、下载并安装Erlang
可以从官网下载https://www.erlang.org/downloads
或者从云盘下载
链接:https://pan.baidu.com/s/1Z67e46ybpjjm6ry6BPkKrA
提取码:56bk
3、安装Erlang
tar -zxvf otp_src_23.0.tar.gz
cd otp_src_23.0
./configure --prefix=/usr/local/bin/erlang --without-javac
make && make install
echo "export PATH=$PATH:/usr/local/bin/erlang/bin:/usr/local/bin/rabbitmq_server-3.8.5/sbin" >> /etc/profile
source /etc/profile
4、安装Rabbitmq,Rabbitmq只有二进制Build
可以从官网下载https://www.rabbitmq.com/download.html
链接:https://pan.baidu.com/s/1tGLF-P-nPjFQQ-TvOiL-Aw
提取码:4dqz
xz -d rabbitmq-server-3.8.3.tar.xz
tar -xvf rabbitmq-server-generic-unix-3.8.5.tar -C /usr/local/bin/
echo "export PATH=$PATH:/usr/local/bin/erlang/bin:/usr/local/bin/rabbitmq_server-3.8.5/sbin" >> /etc/profile
source /etc/profile
初始化rabbitmq的管理界面
rabbitmq-plugins enable rabbitmq_management
启动Rabbitmq
rabbitmq-server -detached
添加用户
rabbitmqctl add_user admin admin
添加用户权限
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
修改用户角色
rabbitmqctl set_user_tags admin administrator
关闭Linux防火墙
service iptables stop
chkconfig --level 345 iptables off
配置Rabbitmq Cluster
按照上述步骤准备两台Linux并安装好Rabbitmq环境,将其中一台Linux上的erlang cookie复制到另一台,erlang cookie的位置通常在$home/.erlang.cookie 或者/var/lib/rabbitmq/.erlang.cookie。
1、修改第一台Linux主机名
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node1
2、修改/etc/hosts文件
[root@node1 ~]# vi /etc/hosts
127.0.0.1 node1
192.168.161.10 node1
192.168.161.20 node2
3、启动Rabbitmq
rabbitmq-server -detached
准备第二台机器
1、修改第二台Linux主机名
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node2
~
2、修改/etc/hosts文件
127.0.0.1 node2
192.168.161.10 node1
192.168.162.20 node2
3、启动Rabbitmq
rabbitmq-server -detached
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app
检查这两台机器的控制台
4、配置镜像队列策略
在其中一台Linux的Rabbitmq控制台上的Admin菜单中,点击Policies
创建队列策略。
在另外一台Linux的Rabbitmq控制台上也可以看到新建的队列策略
测试集群
在其中一台Linux的Rabbitmq控制台上创建一队列并发布一条消息。
在另一台Linux的Rabbitmq控制台上可以看到此队列和消息
5、配置统一的Rabbitmq集群代理
可以使用Haproxy作为Rabbitmq集群代理,也可以选择其他工具
在其中一台Linux上安装Haproxy
yum -y install haproxy
修改配置文件
vi /etc/haproxy/haproxy.cfg
在配置文件最后添加
listen rabbitmq_cluster 192.168.161.10:5670
mode tcp
option tcplog
balance roundrobin
server rabbit1 192.168.161.10:5672 check inter 5000 rise 2 fall 2
server rabbit2 192.168.161.20:5672 check inter 5000 rise 2 fall 2
listen private_monitoring :8100 mode http option httplog stats enable stats uri /rabbitmqstats stats refresh 5s
客户端连接192.168.161.10:5670即可使用Rabbitmq集群
6、编写Java程序发送消息
使用SpringBoot框架,POM文件中引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
Java代码,连接Haproxy代理的服务端口,由Haproxy代理转发给Rabbitmq集群
package com.gf.erp.util;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
public class AmqpUtil {
public static void main(String[] args) throws Exception
{
ConnectionFactory cf = new ConnectionFactory();
cf.setUsername("admin");
cf.setPassword("admin");
cf.setVirtualHost("/");
cf.setHost("192.168.161.10");
cf.setPort(5670);
Connection con = cf.newConnection();
Channel channel = con.createChannel();
byte[] data = "Hello Message".getBytes();
channel.basicPublish("", "testque", null, data);
channel.close();
con.close();
}
}