是否可以在RabbitMQ中使用交换?

Ore*_*zor 4 .net message-queue amqp rabbitmq rabbitmq-exchange

也许我在这里问错了问题.

我正在尝试做的事情:多个生产者将动态类别中的数据推送到命名交换中.多个消费者需要从这些动态命名的队列中获取这些数据并对其进行操作.

问题是我看到的所有消费示例都要求消费者/订阅具有特定的队列名称,而我的消费者不知道队列的名称,他们也不需要知道这一点.

我为什么要这样做?两个原因:

  1. 我一次可以拥有N个这些动态类别.我希望队列能够平等地为这些类别提供服务.目前我们有一个队列(msmq),它接受所有这些类别并在FIFO中提供它们(这意味着某些类别在一段时间内处于饥饿状态).

  2. 能够平等地服务所有类别,而不是fifo,让我想出有趣的QoS(默认情况下,我知道Rabbit将循环服务消息).

所以,回到我的问题(如果它有效):是否可以消耗队列中的消息?

Dav*_*sot 5

如果有动态订阅者是一种选择,我想建议两种可能的解决方案:

解决方案1:

  • 使用主题交换.
  • 在向您的交易所发布消息时使用强制传递标记.
  • 如果消息被拒绝:创建队列,将其绑定在特定的路由键,开始对队列中的用户,重新发布被拒绝的消息.
  • 使用自动删除队列,这样当用户停止时,他们的队列将消失,整个自动创建过程可以重新启动.

解决方案2:

  • 使用主题交换.
  • 在向您的交易所发布消息时使用即时交付标志.
  • 如果消息被拒绝:创建队列,将其绑定在特定的路由键,开始对队列中的用户,重新发布被拒绝的消息.
  • 使用持久队列.由于队列创建是幂等的,因此可以通过重新创建过程,这里的关键部分是确保实时订阅者正在侦听队列.

如果动态订阅者不是一个选项,那么这就是我的建议.假设您仅限n个订阅者:

  • 定义在n个路由键中散列动态类别的策略,
  • 使用直接交换,
  • n路由密钥上绑定n个队列,
  • 每个队列有一个用户.