multithreading - RabbitMQ: channel 与交易所的关系

标签 multithreading rabbitmq

现在我正在使用 rabbitMQ 在两个程序之间发送数据 - 1 个队列、1 个 channel 、1 个交换。我打算将它扩展为多线程,并且我想在第二个线程上声明另一个队列。

  • 我知道在这种情况下我应该使用另一个 channel ,但我想知道的是是否有必要声明另一个具有不同名称的交换?
  • 两者到底是什么关系?
  • 在什么情况下需要多次交换?

最佳答案

如您所知, channel 是用于到达 rabbitMQ 对象的通信端点。

目前有2种对象:

  • 队列,它们只是消息的缓冲区,
  • Exchange,它们是广播设备。

打个简单的比方,队列就是消息堆积的管道,交换器就是管道之间的T型、十字型等类型的连接器。

也许将其与物理网络进行比较会更好,其中队列就像电缆,而交换就像交换机或智能集线器,不同的分配策略可以被选中。

所以基本上,您需要做的只是从新的消费者线程创建一个新队列,让它连接到交换对象(您应该为其命名),然后让生产者线程将其消息发送到独家交换对象。任何新线程都可以遵循相同的协议(protocol)。

最后一点是根据您希望消费者接收消息的方式为交换对象、循环、扇出等选择正确的分发方法。

关于multithreading - RabbitMQ: channel 与交易所的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27913342/

相关文章:

c++ - 为什么 _beginthreadex 因 ERROR_INVALID_ACCESS 而失败?

java - 处理选择器键的最佳方法是什么?

java - EJB 中基于 Zookeeper 的锁

rabbitmq - 监控rabbitmq以确保一切顺利运行的最佳方法是什么?

java - 使用 spring @Scheduled 的问题

c++ - 陷入循环等待状态。需要帮助才能出去

spring-boot - 相当于 RabbitMq Listener 的 Servlet Filter 是什么?

rabbitmq - 在 MassTransit 上动态创建队列

java - 为什么我的 main 方法一直在运行?

c# - QueueingBasicConsumer 已弃用。哪个消费者更好地实现 RabbitMq .net 客户端