RabbitMQ:Federation模式的搭建和测试

1.声明

当前内容用于本人学习和复习之用,当前内容主要包括搭建Federation模式和测试该模式的作用

2.开启Federation模式

使用两台主机搭建

节点节点ip
node1192.168.1.100
node2192.168.1.108

为所有的主机都开启Federation插件

./rabbitmq-plugins enable rabbitmq_federation_namegement 

在这里插入图片描述
在这里插入图片描述
ui界面效果
在这里插入图片描述

3.使用Federation 搭建基于Exchange的模式

1.为所有的主机都添加一个相同名称的Exchange:CommonsExchange
在这里插入图片描述

2.为node1添加queue为node1Queue,为node2添加queue为node2Queue,并都绑定CommonsExchange

在这里插入图片描述
在这里插入图片描述

3.为当前的node1添加一个Federation Upstream:node1Federation(并指定url为:amqp://root:root@192.168.1.108:5672)

在这里插入图片描述

4.为当前的node1添加一个策略:node1Policy并指定参数Federation Upstream为node1Federation
在这里插入图片描述

5.查看node1中的Federation Status的状态
在这里插入图片描述

解释:上面中node1指定node2作为上游

6.测试:向node2中的CommonsExchange中发送给数据
在这里插入图片描述
7.查看ui界面的结果
node1界面
在这里插入图片描述
node2界面
在这里插入图片描述
发现消息会从node2中转发给node1的CommonsExchange(采取复制的方式)

8.创建消费者用于消费node1的数据

public class ClusterNode2MsgComsumer {
	private static String host = "192.168.1.100";
	private static int port = 5672;
	private static String username = "root";
	private static String password = "root";

	public static void main(String[] args) throws IOException {
		RabbitMqUtils mqUtils = new RabbitMqUtils(host, port, username, password);
		String queueName = "node1Queue";
		Connection connection = mqUtils.getConnection();
		Channel channel = connection.createChannel();
		channel.basicConsume(queueName, true, new DefaultConsumer(channel) {

			@Override
			public void handleDelivery(String consumerTag, Envelope envelope, 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接收消息==>【" + StringUtils.toString(body) + "】");
			}

		});

	}
}

在这里插入图片描述
node1、node2节点的消息
在这里插入图片描述
在这里插入图片描述

发现此时node2节点的数据并没有被消费,说明,Federation模式中消息是转发,会出现重复消费

9.测试向node1中发送数据
在这里插入图片描述
在这里插入图片描述
此时发现node2中不会有数据,说明消息只能从上游发送到下游

10.搭建将node1作为node2的上游(实现双向的发送)
在这里插入图片描述
直接在当前的node2中创建Federation和Policy并指向到当前的node1

再次向node1中发送数据发现消息被转发到了node2

发现可以将node1中的消息复制转发到node2中了

4.查看Federation实现原理

1.查看Connection
在这里插入图片描述
在这里插入图片描述
发现双方都有两个连接:一个是amqp协议的,一个是direct协议的

2.查看Channel
在这里插入图片描述
在这里插入图片描述
3.查看Exchange
在这里插入图片描述
4.查看Queue
在这里插入图片描述

总结

  1. Federation Upstream就是通过amqp协议进行拉取消息的,通过用户名密码,以及queue
  2. 会自动打开向其他node的Connection,并自动创建Channel来执行其他操作

5.创建Queue的Federation

基本模式为

  1. 双方创建相同名称的Queue
  2. 一方节点创建Federation Upstream并将其指向另外一个节点
  3. 为创建Federation的一方节点添加Policy并使用Federation Upstream
  4. 完成(基本操作和上面的Exchange创建完全一致)

这里是显示
在这里插入图片描述

6.总结

1.使用Federation Upstream创建的是复制分发模式,不是集群

2.该模式的消息只能从上游发送给下游,并且上游和下游的消费是分开的

3.可以搭建循环的Federation Upstream,当前的Federation UpStream是基于HTTP协议的,使用方式比集群要好

以上纯属个人见解,如有问题请联本人!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值