我与我的同事在Server A
和Server B
之间讨论RabbitMQ
设计,这里是流程图如下。是否应该在RabbitMQ中多次声明交换或队列?
Server A
通过exchange A
和Queue B
将消息发送到Server B
,并从通过Server B
Queue A
接收消息。反之亦然Server B
。
在Server A
中有两个类,用C++
实现;一个是sender
,另一个是receiver
。使用JavaScript
实现的Server B
的代码结构相同。
对于sender
和receiver
在Server A
。我的同事的想法是:
- 在发件人的初始化:
- 创建
rabbitmq
- 连接声明
exchange A
- 声明
Queue B
- 绑定的关键是
Queue B
- 创建
- 最初化在接收器:
- 创建
rabbitmq
- 连接声明
exchange B
- 声明
Queue A
- 结合的关键
Queue A
- 创建
同样的逻辑在Server B
。
不过,我不认为Queue B
和Exchange B
应该在Server A
声明。它们应在Server B
中声明。
最后,我遵循我的同事的想法实施它,因为他之前做过一些相关的工作。
今天,Server A
在功能amqp_queue_declare
在Sender
模块测试期间挂起,但重新启动后RabbitMQ
效果很好。所以我怀疑我的同事想要初始化Sender
。
我的想法:
Server A
- 在发件人
- 创建
rabbitmq
- 连接的初始化声明
Exchange A
- 创建
- 在接收器中的初始化
- 创建
rabbitmq
- 连接创建
Queue A
- 结合的关键
Queue A
- 创建
- 在发件人
Server B
- 在发件人初始化
- 创建
rabbitmq
- 连接声明
Exchange B
- 创建
- 初始化在接收机
- 创建
rabbitmq
- 连接创建
Queue B
- 结合的关键
Queue B
- 创建
- 在发件人初始化
有人能告诉我有什么不对我的想法?还是有更好的解决方案?
编辑:从@Sigismondo
回答问题做所有需要被交付给消费者A/B的消息?
没有
没有消费者A/B需要的情况下,通知的一些消息是失去了什么?
不,我想知道消费者A如何知道消息丢失了?
在消费者A/B无法到达的情况下,预期行为是什么?
如果消费者A不可达,则生产者B不会向A发送任何消息,反之亦然。 B怎么可能知道消费者A不可及?
目前,在我的系统中,每条消息都有缺陷。所以B在前一种情况下不能从A得到答复,则B不会将消息发送给A.
如果生产者A/B停机,预期行为是什么?
如果生产商B是下跌,那么A将不会收到来自B.所以任何消息将不会发送任何信息给B.
“目前,在我的系统中,每条消息都有缺陷”。你的意思是RabbitMQ/AMQP标准,不是吗? – Sigismondo
@Sigismondo不是amqp标准ack,在我自己的系统中定义的ack消息。 – zangw
我明白了。你的问题不能被归类为“RPC-over-messaging”,如这里举例说明的那样? https://www.rabbitmq.com/tutorials/tutorial-six-python.html – Sigismondo