使用RabbitMQ创建动态队列

3XX*_*XX0 10 rabbitmq task-queue

我一直在学习RabbitMQ各种拓扑,但是,我找不到任何对生产者发出的动态队列创建(也就是Declare Queue)的引用.想法是根据特定事件(例如HTTP请求)动态创建队列.队列将是临时的,具有TTL集并以事件ID命名.然后,消费者可以订阅主题"event.*"并合并与其相关的所有消息.

例:

  1. 收到HTTP POST"创建用户"
  2. producer创建一个队列user.ID
  3. 在队列中推送有关用户的所有后续消息(例如"添加用户名","添加电子邮件"......)
  4. worker被分配到随机队列"user.*"并将所有内容合并到一个用户帐户中
  5. TTL过期后会自动删除队列

现在,RabbitMQ的这种情况是否可行?

the*_*yer 5

本质上,您要执行的操作是使用RabbitMQ来缓冲在一组队列中等待的消息(这是消息队列系统的定义)。:)

假设您从消费方知道队列是什么,那么您就不会有任何问题。生产者不能创建队列没有任何限制。需要注意的是,当队列到期时,队列中的所有消息都将被丢弃(或者可以选择将它们设置为进入死信队列)。

您尝试了什么代码?

编辑

经过进一步澄清(根据您的评论)-您正在寻找“使用通配符”与通配符发布。RabbitMQ目前不支持这种拓扑(本文要求类似的功能)。

您需要做的是定期枚举队列(使用RabbitMQ API);之后,您的应用可以决定从中消费哪些产品。删除队列后,使用者将自动关闭。

特别说明 应该理解,这里要问的是反模式。使用队列的系统的典型行为是根据内容将消息路由到队列。因此,经过适当编排的系统将具有一组在一个或多个静态定义的队列上运行的工作程序。根据专业化程度,不同的工人可能会走不同的队列。当一系列交互导致消息被发布到队列时,分配给队列的工作人员将以先到先得的方式处理消息(但是,正如本文所讨论的,不能保证多个消费者的订单) 。然后,所需的系统行为会表现为执行队列中各种功能的工作人员组成。

  • 消费不像发布那样工作。您必须知道要从RabbitMQ中使用的队列。从RabbitMQ api枚举队列以确定它们是相对简单的。 (2认同)