[英]RabbitMQ: routing messages to threads
我有一个用Ruby编写的应用程序,该应用程序具有多个线程,每个线程将请求发送到远程AMQP端点。 当必须运行新任务时,会不时产生这些线程。
如果我使用每个线程的临时排他队列来发送对其请求的响应,那么编写代码来处理该Ruby服务中的传入消息变得很容易。 队列在关联通道关闭后即被删除,因此它们不会在目的结束后留下来。
我能想到的所有替代方法都需要一个侦听器线程在一个或多个队列上侦听,这些队列将所有传入的消息/响应接收到Ruby服务中,然后使用一些消息标识符将这些消息路由到等待的线程。 这似乎更加复杂,并且我无法使用RabbitMQ进行所有必需的语义路由。
第一个模型是否是可行的AMQP通信模型? 是否有更好的模式来处理这种情况?
答案很大程度上取决于您的用例
如果您不关心删除给定队列时丢失消息的情况,那么第一种选择是好的。
如果您需要消息一直留在队列中直到需要处理的消息,那么您需要在消息所在的地方保留一个持久队列。
使用rabbitmq不需要每个线程排队。
但是,您应该为每个线程使用一个通道。
因此,每个线程可以有一个通道,并且可以从同一(或不同)队列使用多个通道而不会出现问题。
只要将通道限制为一个线程,就可以根据需要使用的队列做任何事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.