SET化消息中间件架构实现

本文介绍了如何利用RabbitMQ的Federation插件实现跨集群数据同步。通过配置上游和下游节点,创建交换机、队列及绑定,并设置策略,确保消息在两个集群间双向同步,从而构建SET化消息中间件架构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SET化架构设计方案:基于集群

图中有两个集群,如果需要实现数据同步 ,那么通过Federation将集群一的node3和集群二的node1实现数据同步即可,在集群内可以通过镜像队列进行数据同步。

 

实现:通过Federation插件进行数据同步

1、准备好环境:虚拟机+centos7安装好rabbitmq 

      2个节点:192.168.2.208  、192.168.2.209

2、启动服务 service rabbitmq-server start &或者后台启用

3、启用Federation管理插件

rabbitmq-plugins enable rabbitmq_federation
rabbitmq-plugins enable rabbitmq_federation_management

4、访问http://192.168.2.209:15672/#/users管控台会出现如图所示:

5、选择 192.168.208作为上游节点,192.168.2.209作为下游节点:

在下游节点192.168.2.209操作:

(1)新建一个交换机、队列以及绑定

(2)http://192.168.2.209:15672/#/users管控台点击Federation Upstreams,

 与上游节点建立关系:

 接下来点击polices,添加策略:

(3) 添加完之后观察exchange和queue:

点击Federation status:

 

打开上游节点192.168.2.208:

打开Connections:

打开exchange,多了一条灰色的,这是个federation的通道,不能用来发送消息,还有刚才建立的test.exchange的交换机:

6、测试发送消息

在上游节点192.168.2.208 test.exchange 中发送一条消息 

看下游节点192.168.2.209是否能够同步到该消息。

如果在192.168.2.208上也想接收该消息并消费,在208上新建一个队列与该test.exchange建立绑定即可。这样就可以实现多中心的数据同步。

 

### 分布式消息中间件概述 分布式消息中间件是一种用于在分布式系统中传递消息的软件工具,其核心目标是解耦系统的不同模块并提高系统的可扩展性和可靠性。常见的分布式消息中间件有 Apache Kafka、RabbitMQ 和 RocketMQ 等。 #### 原理分析 分布式消息中间件的工作原理主要基于发布/订阅模式和点对点模式两种通信方式。其中,RocketMQ 是一种高性能的消息队列系统,支持高吞吐量和低延迟的消息传输[^1]。它通过 Producer 将消息发送到 Broker 中间节点,Consumer 则从 Broker 订阅这些消息。这种设计使得生产者和消费者之间无需直接交互即可完成数据交换。 #### 架构组成 根据参考资料中的描述,RocketMQ 的架构由多个关键组件构成,主要包括 Namesrv(名称服务器)、Broker(消息代理)、Producer(消息生产者)以及 Consumer(消息消费者)。具体来说: - **Namesrv**: 负责管理元数据信息,提供路由查询服务给 Producers 和 Consumers 使用[^2]。 - **Broker**: 存储实际的消息内容,并处理来自客户端的各种请求操作。 - **Producer & Consumer**: 完成消息生产和消费的功能逻辑实现。 此外,在更复杂的场景下还可能涉及到其他辅助角色如 SchedulerService 或 MonitorService 来增强整个平台的能力范围。 #### 实现细节探讨 对于像 DDM 这样的分布式数据库中间件而言,其实现在很大程度依赖于良好的路由算法来决定每条 SQL 请求应当被定向至哪个具体的物理分片之上执行[^3] 。而在消息领域内同样存在类似的考量因素——即如何高效准确地将特定类型的数据包投递给预定的目标群体成员之一或者全体成员共同接收处理。 以下是有关 rocketmq 生产环境部署的一个简单 python demo 示例代码片段展示: ```python from rocketmq.client import PushConsumer, ConsumeStatus def consume_message(msg): print(f"Received message: {msg.body.decode('utf-8')}") return ConsumeStatus.CONSUME_SUCCESS consumer = PushConsumer("example_group") consumer.set_name_server_address("localhost:9876") consumer.subscribe("TestTopic", "*", consume_message) consumer.start() print("Consumer started.") while True: pass ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值