现在我正在使用 rabbitMQ 在两个程序之间发送数据 - 1 个队列、1 个 channel 、1 个交换。我打算将它扩展为多线程,并且我想在第二个线程上声明另一个队列。
- 我知道在这种情况下我应该使用另一个 channel ,但我想知道的是是否有必要声明另一个具有不同名称的交换?
- 两者到底是什么关系?
- 在什么情况下需要多次交换?
最佳答案
如您所知, channel 是用于到达 rabbitMQ 对象的通信端点。
目前有2种对象:
- 队列,它们只是消息的缓冲区,
- Exchange,它们是广播设备。
打个简单的比方,队列就是消息堆积的管道,交换器就是管道之间的T型、十字型等类型的连接器。
也许将其与物理网络进行比较会更好,其中队列就像电缆,而交换就像交换机或智能集线器,不同的分配策略可以被选中。
所以基本上,您需要做的只是从新的消费者线程创建一个新队列,让它连接到交换对象(您应该为其命名),然后让生产者线程将其消息发送到独家交换对象。任何新线程都可以遵循相同的协议(protocol)。
最后一点是根据您希望消费者接收消息的方式为交换对象、循环、扇出等选择正确的分发方法。
关于multithreading - RabbitMQ: channel 与交易所的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27913342/