RabbitMQ集群架构模式

RabbitMQ集群架构模式_第1张图片

 RabbitMQ集群架构模式_第2张图片

 RabbitMQ集群架构模式_第3张图片

 RabbitMQ集群架构模式_第4张图片

 RabbitMQ集群架构模式_第5张图片

 搭建Mirror镜像集群:

RabbitMQ集群架构模式_第6张图片

 RabbitMQ集群架构模式_第7张图片

 RabbitMQ集群架构模式_第8张图片

 RabbitMQ集群架构模式_第9张图片

 

4369是erlang的发现端口
5672是rabbitmq的通信端口
15672是rabbitmq的可视化控制台的端口号
25672是erlang底层发送消息和分配消息的底层端口


firewall-cmd --zone=public --add-port=4369/tcp --permanent

firewall-cmd --zone=public --add-port=5672/tcp --permanent

firewall-cmd --zone=public --add-port=15672/tcp --permanent


firewall-cmd --zone=public --add-port=25672/tcp --permanent

firewall-cmd --reload

RabbitMQ集群架构模式_第10张图片

 

find / -name *.cookie   查询到该文件里面是一串字符,我们要让多台机子的该文件的字符一致
所以下面我们要进行远程拷贝
scp /var/lib/rabbitmq/.erlang.cookie 192.168.70.182:/var/lib/rabbitmq

进行权限设置
chmod 400 /var/lib/rabbitmq/.erlang.cookie    注意分别在两台机子上实现 

RabbitMQ集群架构模式_第11张图片

RabbitMQ集群架构模式_第12张图片

 RabbitMQ集群架构模式_第13张图片

 分别启动两台服务器的rabbit
我们要在从机上配置我这里选择了第二台进行配置

暂停从机的rabbit的服务
rabbitmqctl stop_app

把从机加入到主机上
rabbitmqctl join_cluster rabbit@m1

启动从机的服务
rabbitmqctl start_app


最后检验结果
rabbitmqctl cluster_status 
会出现如下结果:
[{no des,[{disc,[rabbit@m1,rabbit@m2]}]},
 {running_nodes,[rabbit@m1,rabbit@m2]},
 {cluster_name,<<"rabbit@m1">>},
 {partitions,[]},
 {alarms,[{rabbit@m1,[]},{rabbit@m2,[]}]}]

 第一台的操作会复制到第二台服务》

Haproxy负载均衡:

RabbitMQ集群架构模式_第14张图片

 RabbitMQ集群架构模式_第15张图片

 yum install haproxy    进行安装HA代理服务器 


rpm -ql haproxy        查看安装文件,主要查看目录结构


启动 haproxy服务命令   haproxy


然后查找ha的配置文件   
find / -name haproxy.cfg
会出现如下两个文件
    /etc/haproxy/haproxy.cfg
    /usr/share/doc/haproxy-1.5.18/examples/haproxy.cfg
    使用vim对   /etc/haproxy/haproxy.cfg进行编辑

RabbitMQ集群架构模式_第16张图片

 

#对MQ集群进行监听
listen rabbitmq_cluster
    bind 0.0.0.0:5672
    option tcplog
    mode tcp 
    option  clitcpka
    timeout connect 1s 
    timeout client  10s
    timeout server  10s
    balance roundrobin
    server node1 192.168.132.137:5672 check inter 5s rise 2 fall 3  
    server node2 192.168.132.139:5672 check inter 5s rise 2 fall 3

#开启haproxy监控服务    
listen http_front
    bind 0.0.0.0:1080
    stats refresh 30s
    stats uri /haproxy?stats
    stats auth admin:admin

haproxy
配置完成之后启动
haproxy -f /etc/haproxy/haproxy.cfg


通过火狐浏览器进行检验操作
http://localhost:1080/haproxy?stats


最后可以查看haproxy的暴露的端口

RabbitMQ集群架构模式_第17张图片

 RabbitMQ集群架构模式_第18张图片

 RabbitMQ集群架构模式_第19张图片

 本机访问:

RabbitMQ集群架构模式_第20张图片Consumer

public class Consumer {
    //一般情况先启动消费端
    public static void main(String[] args) throws IOException, TimeoutException {

        Connection connection = RabbitUtils.getConnection();
        Channel channel = connection.createChannel();

        channel.queueDeclare(RabbitContent.QEUEU_HELLO,false,false,false,null);

        //开始接受消息
        //参数2为是否自动签收,如果为true表示自动如果为false表示不自动
        //channel.basicConsume(RabbitContent.QEUEU_HELLO, false, new MyConsumer(channel));
        channel.basicConsume(RabbitContent.QEUEU_HELLO, false, new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                String msg = new String(body);
                System.out.println("接受到消息:" + msg);
                //最后我么要做签收操作,目录是我们收到了消息就要把队列中的消息删除
                channel.basicAck(envelope.getDeliveryTag(),false);
            }
        });

    }
}

 producer.java:

public class Producer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //创建物理连接
        Connection connection = RabbitUtils.getConnection();
        //创建虚拟连接
        Channel channel = connection.createChannel();
        //通过Channel来进行数据的传输操作
        //我这里要向mq发送消息
        channel.queueDeclare(RabbitContent.QEUEU_HELLO,false, false, false,null);
        String str = "NBANBANBA";
        channel.basicPublish("", RabbitContent.QEUEU_HELLO, null, str.getBytes());
        System.out.println("消息发送成功");
        channel.close();
        connection.close();
    }
}

RabbitMQ集群架构模式_第21张图片

 

你可能感兴趣的:(java-rabbitmq,rabbitmq,架构)