我试图找出是否可以从阻塞场景切换到更具反应性的场景。
我有传入更新命令到达队列,我需要按顺序处理它们,但只需要处理相同实体的那些命令。从本质上讲,只要没有两个流包含有关同一实体的事件,我就可以创建尽可能多的并行更新事件流。
我认为主队列的使用者可能能够利用amqp的路由机制和临时队列,为每个实体id创建临时队列,并将消费者挂钩。一旦订户完成并且当前没有关于该实体的其他事件在队列中,则可以丢弃该队列。
这种情况是经常使用的吗?有没有更好的方法来实现这一目标?在我们当前的系统中,我们使用基于id的命名锁来防止并发更新。
答案 0 :(得分:1)
至少有两个选项:
每个实体的单个队列 并且n个消费者在一个实体队列中。
包含所有实体消息的一个队列。消息包含数据对于实体的含义。您可以将其拆分为多个队列(一个实体的一个AMQP-Queue)或使用BlockingQueue实现。
在qmqp-queues中拆分实体的好处
使用内部BlockingQueue实现的好处
无论如何,它确实取决于你想要什么,因为这两种方式都可以带来好处。
<强>更新强> 我不确定我现在能不能找到你,但是让我给你一些资源来尝试一些事情。 有一些特殊的rabbitmq extensions也许其中一些可以给你一个想法。请查看lternate exchanges和exchange to exchange绑定。
同样对于基本测试,我不确定它是否涵盖所有rabbitmq功能或所有amqp功能,但this有时可能有用。请记住,此可视化中的路由键是生产者名称,您还可以找到一些示例。导入和导出配置。