在发布消息rabbitmq之前选择使用者
我正在尝试构建一个系统,在该系统中,我需要选择下一个可用且合适的消费者从队列发送消息(或者可能是不使用该队列的任何其他解决方案) 要求 我们有多个发布者/客户机,他们将在一方发送对象(图像)进行处理,还有多个分析人员将对其进行处理,一旦处理完毕,发布者应得到相应的响应 出版商不在乎由哪位分析师来处理数据 用户有一个web应用程序,可以将每个客户端/发布服务器映射到一个或多个或所有代理,例如,如果发布服务器P1映射到代理a和代理B,则来自P1的所有对象都可以由代理a或代理B处理。注:一个对象只能由一个代理处理 根据映射,我应该有一个中间件,它使用来自所有发布者的消息并分发给代理 解决方案1 我最初的想法是建立一个队列,让所有的发布者发布他们的消息。另一个队列,代理发布消息说他们正在等待处理对象 中间件拾取消息,获取它可以将消息发送到的代理的可能列表(从缓存的数据库),并通过代理队列查找下一个合适的可用代理,然后将消息发布到该代理 此解决方案的问题是,如果我有代理队列,如a、b、c、d,并且我收到的消息只能由代理b处理,我将拒绝代理d&c,它们将最终位于队列的尾部,我有大约180个代理,因此它们可能永远不会被拾取,或者如果下一条消息只能由代理d处理(例如)我们必须拒绝所有的代理人才能到达那里 解决方案2 从发布服务器到中间件的第一位仍然是相同的 有一个扩展的快速nosql数据库,代理在其中添加一条记录以通知可用性。基本上是一个键值对 中间件从缓存获取配置,并从nosql数据库获取下一个可用+合适的代理,将消息发送到代理的队列(通过直接交换),并更新nosql以设置isavailable false,并获取下一条消息 这个解决方案的问题是数据库和中间件可能会成为瓶颈,而且如果我扩展中间件,我最终会遇到数据库并发问题,例如,如果我有两个运行的中间件副本,每个副本都会收到一条消息,这条消息可以由代理a和代理B处理,并且两个代理都可用。 这两个中间件副本将查询数据库,并可能获得可用的A,最终在B仍在等待消息处理时将两条消息都发送给A 我将有大约100个出版商和180个代理商开始 对于如何改进这些解决方案或任何其他可行的解决方案,我们将不胜感激 根据这一点,我还需要弄清楚代理如何将响应发送回发布者在发布消息rabbitmq之前选择使用者,rabbitmq,messaging,soa,nosql,Rabbitmq,Messaging,Soa,Nosql,我正在尝试构建一个系统,在该系统中,我需要选择下一个可用且合适的消费者从队列发送消息(或者可能是不使用该队列的任何其他解决方案) 要求 我们有多个发布者/客户机,他们将在一方发送对象(图像)进行处理,还有多个分析人员将对其进行处理,一旦处理完毕,发布者应得到相应的响应 出版商不在乎由哪位分析师来处理数据 用户有一个web应用程序,可以将每个客户端/发布服务器映射到一个或多个或所有代理,例如,如果发布服务器P1映射到代理a和代理B,则来自P1的所有对象都可以由代理a或代理B处理。注:一个对象只能由
谢谢我将从我的开源服务总线的角度回答这个问题: 通常,人们会忽略任何基于内容的路由,而只是拥有一个分发模式。所有消息都将发送到主端点,它将分发消息。但是,如果您决定坚持使用这些逻辑分组,则每个逻辑分组(每个代理组)都可以有主端点。您仍然会有主端点,但不是将工作端点映射到代理,而是将代理分组映射到逻辑主端点,并由工作端点支持 然后,在主端点中,根据您的内容(作为代理标识符),将消息转发到相关的逻辑主端点。一直跟踪原始发件人。在worker中,您将向原始发件人的队列发送一条消息
我相信,使用任何服务总线,您都可以做到几乎相同的效果。由于发送方和接收方的总数只有数百个,如何为每个发送方创建一个队列。根据发送方-接收方映射,接收方订阅发送方队列(在映射更改时更新订阅)。您可以将接收器配置为在处理完一条消息后(以随机方式)只从其订阅的所有队列接收下一条消息。我在这里看到了几个要求,可以归结为几件事,我认为:
- publisher不关心哪个代理处理映像
- publisher需要知道图像处理何时完成
- 代理一次只能处理一个映像
- 代理只能处理某些图像
false
——这意味着,消费者在处理完消息后必须确认消息
要仅使用特定代理可以处理的消息,请将RabbitMQ的路由功能用于多个队列。队列将根据图像类型或消费者可以选择图像的一些其他标准创建
例如,如果有两种类型的图像:TypeA和TypeB,您将有两个队列-一个用于TypeA,一个用于TypeB
然后,如果Agent1只能处理TypeA图像,那么它将只使用TypeA队列中的图像。如果Agent2可以处理这两种类型的映像,它将从两个队列中使用
要将正确的图像放入正确的队列,发布者需要使用正确的路由密钥。如果您知道图像类型(或任何se