1、RabbitMq联邦的搭建
启用federation插件和管理插件
1、启动RabbitMQ服务
rabbitmq-server -detached
2、启用federation插件
使用root用户
rabbitmq-plugins enable rabbitmq_federation
3、启用管理插件
rabbitmq-plugins enable rabbitmq_federation_management
安装成功后,在web监控界面,在选项admin看到federation的信息
4、定义Federation Upstreams
name:可以随便起个名字
URI:一般这么写:
amqp://admin:admin123@10.106.x.x:5672
或者是:
amqp://admin:admin123@10.106.x.x
端口号加不加都行admin是用户名,admin123是密码。都是控制台的访问的用户名和密码
正确的配置如下图示:
5、定义fedration策略
配置好如下图所示:
然后查看fedration的状态 fedration status必须为running才可以,其他状态比如为starting,都是有问题的。
6、发送消息验证
在rabbitMq发送一个消息
写个应用程序来消费这些消息
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") + "】");
}
});
}
}
可以看到消费前是这样的
运行执行消费
消费后结果是这样的
ok,完毕
2、RabbitMq联邦的验证
2.1、首先在微软云的交换机里发送一条消息
可以看到这条消息在队列中已经存在
再去查看数据中心队列里的消息
已经有消息了。我们在查看下消息内容
和我们之前在云上发送的消息是一致的。
这样就可以说明,我们在云上的消息,通过RabbitMq联邦的形式,可以复制到数据中心里面。
最后,我们通过应用程序将这个数据中心的消息消费掉。
这时,再查看数据中心队列的消息,已经没有了,如下图所示: