首页 文章

使用RabbitMQ创建动态队列

提问于
浏览
6

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

Example:

收到

  • HTTP POST "Create user"

  • producer创建一个队列user.ID

  • 推送有关其队列中用户的所有后续消息(例如"Add username","Add email" ...)

  • worker被分配到随机队列"user.*"并将所有内容合并到用户帐户中
    TTL过期后会自动删除

  • 队列

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

1 回答

  • 3

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

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

    您尝试过哪些代码?

    编辑

    进一步澄清(从您的评论) - 您正在寻找"wildcard consuming" vs通配符发布 . RabbitMQ目前不支持这样的拓扑(this post要求类似的功能) .

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

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

相关问题