使用RabbitMQ创建动态队列

时间:2014-01-21 17:36:01

标签: rabbitmq task-queue

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

示例:

  1. HTTP POST“创建用户”已收到
  2. producer创建一个队列user.ID
  3. 在队列中推送有关用户的所有后续消息(例如“添加用户名”,“添加电子邮件”......)
  4. worker被分配到随机队列“user。*”并将所有内容合并到用户帐户
  5. 队列在TTL过期后自动删除
  6. 现在,RabbitMQ的这种情况是否可行?

1 个答案:

答案 0 :(得分:5)

基本上,您要做的是使用RabbitMQ来缓冲在一组队列中等待的消息(根据定义,这是消息排队系统所做的事情)。 :)

假设您知道您的队列来自消费方,您将不会遇到任何问题。没有生成器无法创建队列的约束。作为警告,当队列过期时,队列中的所有消息都将被丢弃(或者可选地,它们可以设置为死信队列。)

您尝试过哪些代码?

修改

进一步澄清(来自您的评论) - 您正在寻找“通配消费”与通配符发布。 RabbitMQ目前不支持这样的拓扑(this post要求类似的功能)。

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

特别提示 应该理解,这里要问的是反模式。使用队列的系统的典型行为是基于内容将消息路由到队列。因此,正确协调的系统将具有一组在一个或多个静态定义的队列上操作的工作者。不同的工作人员可能会采取不同的队列,具体取决于专业。当一系列交互导致消息发布到队列时,分配给队列的工作人员将以先来先服务的方式处理消息(但是,正如this post讨论的那样,订单无法保证多个消费者)。然后,所需的系统行为将成为执行在队列上运行的各种功能的工作人员的组合。