[英]Limit number of connections to a rabbit queue?
我在ubuntu-16.04 rabbitmq-3.6.6
pika-0.10.0
与rabbitmq-3.6.6
代理一起使用。 我设计了一个请求/回复服务。 所有客户端都推送他们的请求的是一个“请求”队列。 每个客户端都创建一个唯一的Reply队列:服务器将针对此客户端的回复推送到此唯一队列。 我的API可以看作两条消息: init
和run
。
init
消息包含大图像,因此init
是一个大而缓慢的请求。 run
消息更轻,服务器重用以前的图像。 该服务器可以为多个客户端提供服务。 通常,client#1 init
然后run
多次。 如果client#2进入init
和init
,它将替换client#1在服务器上发送的图像。 并且由client#1发出的进一步run
将使用错误的图像。 然后我问:
我认为您的设计有问题。 从逻辑上讲,每个run
对应于某个init
因此必须将它们连接起来。 我将相关ID字段放入init
和run
事件中。 当服务器接收run
它将检查是否已处理了相应的init
并使用该init
的结果。
谈到性能:您可以使init
worker队列并使多个处理服务器监听它。 该示例在RabbitMQ文档中。然后,当发出init请求时,一台可用的服务器将其拾取,并存储您的图像和相关ID。 如果您同时有多个init
请求-没问题,则最终将处理它们(如果服务器空闲则同时处理)
然后执行该过程的服务器将答复消息发送到客户端队列,说明init
工作已完成,并发送必须发布run
请求的队列的名称。
准备就绪后,客户端会将其run
请求发送到正确的队列。
直接回答问题:
有一个常见的误解,就是您发布到queue
。 在RabbitMQ的发布到一个exchange
的是关心你的消息路由到多个队列。 因此,您的问题真的变成了can I limit number of publishing connections to an exchange
吗? 我很确定经纪人方面没有办法。 即使有限制连接数的方法,也可以想象一下情况:
run
。 init
请求。 run
并获取Client2的映像。 连接是暂时的,不能作为事务处理机制来依赖。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.