1、RabbitMq联邦的搭建

启用federation插件和管理插件

1、启动RabbitMQ服务

rabbitmq-server  -detached

2、启用federation插件
使用root用户

rabbitmq-plugins enable rabbitmq_federation

java 连接rabbitmq ssl 端口_用户名


3、启用管理插件

rabbitmq-plugins enable rabbitmq_federation_management

java 连接rabbitmq ssl 端口_数据中心_02


安装成功后,在web监控界面,在选项admin看到federation的信息

java 连接rabbitmq ssl 端口_用户名_03


java 连接rabbitmq ssl 端口_用户名_04


4、定义Federation Upstreams

java 连接rabbitmq ssl 端口_用户名_05


name:可以随便起个名字

URI:一般这么写:

amqp://admin:admin123@10.106.x.x:5672

或者是:

amqp://admin:admin123@10.106.x.x

端口号加不加都行admin是用户名,admin123是密码。都是控制台的访问的用户名和密码

正确的配置如下图示:

java 连接rabbitmq ssl 端口_用户名_06

5、定义fedration策略

java 连接rabbitmq ssl 端口_数据中心_07


配置好如下图所示:

java 连接rabbitmq ssl 端口_用户名_08


然后查看fedration的状态 fedration status必须为running才可以,其他状态比如为starting,都是有问题的。

java 连接rabbitmq ssl 端口_System_09


6、发送消息验证

在rabbitMq发送一个消息

java 连接rabbitmq ssl 端口_System_10


写个应用程序来消费这些消息

rabbitMQ工具类

import com.rabbitmq.client.ConnectionFactory;

import com.rabbitmq.client.Connection;

public class RabbitMqUtils {

    public static Connection getConnection() throws Exception {
        ConnectionFactory factory = new ConnectionFactory();

        factory.setHost("10.136.1.195");
        factory.setPort(5672);
        factory.setVirtualHost("/");
        factory.setUsername("test");
        factory.setPassword("test");
        Connection connection = factory.newConnection();
        return connection;
    }

}

消费消息类

import com.example.rabbitmq.util.RabbitMqUtils;
import com.rabbitmq.client.*;

import java.io.IOException;


public class ClusterNode2MsgComsumer {

    public static void main(String[] args) throws Exception {
        RabbitMqUtils mqUtils = new RabbitMqUtils();
        String queueName = "dc.sync.cloud.queue";
        Connection connection = mqUtils.getConnection();
        Channel channel = connection.createChannel();
        channel.basicConsume(queueName, true, new DefaultConsumer(channel) {

            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)
                    throws IOException {
              /*  System.out.println("consumerTag==>" + consumerTag);
                System.out.println("envelope==>" + envelope);
                System.out.println("props==>" + properties);*/
                System.out.println("消费者node2接收消息==>【" + new String(body,"UTF-8") + "】");
            }

        });

    }
}

可以看到消费前是这样的

java 连接rabbitmq ssl 端口_用户名_11


运行执行消费

java 连接rabbitmq ssl 端口_用户名_12


消费后结果是这样的

java 连接rabbitmq ssl 端口_System_13


ok,完毕

2、RabbitMq联邦的验证

2.1、首先在微软云的交换机里发送一条消息

java 连接rabbitmq ssl 端口_System_14


可以看到这条消息在队列中已经存在

java 连接rabbitmq ssl 端口_用户名_15


再去查看数据中心队列里的消息

java 连接rabbitmq ssl 端口_System_16


已经有消息了。我们在查看下消息内容

java 连接rabbitmq ssl 端口_用户名_17


和我们之前在云上发送的消息是一致的。

这样就可以说明,我们在云上的消息,通过RabbitMq联邦的形式,可以复制到数据中心里面。

最后,我们通过应用程序将这个数据中心的消息消费掉。

java 连接rabbitmq ssl 端口_数据中心_18


这时,再查看数据中心队列的消息,已经没有了,如下图所示:

java 连接rabbitmq ssl 端口_用户名_19