目前,我们有发布自己的消息交换出版社(微服务)的数量。每个消息有一个服务Id属性。队列连接到单个用户(微服务),其处理所述队列中的消息,一个单一的消息的处理是昂贵的操作(需要约20-30秒)。目前,我们有以下的情况:服务A发布〜200条短信,几秒钟B业务发布2条消息之后。因此,订户将处理这些2个消息的第一个200后,才将被处理。
我们要处理在他们来到队列的顺序中的消息,但对于服务Id源。
显而易见的解决方案是将队列划分到单独的队列(每个发布商之一)并单独订阅每个队列,但发行商可以改变的数量,我们需要动态地请求他们和订阅(退订)给他们。
另一种方法是复制我们的用户应用,以获得出版商和客户之间一对一的关系,但是这将需要更多的系统资源。
什么是处理这种情况的最好方法?谢谢!
/!\注意,发布者发布到交流,而不是一个队列。
我们要处理在他们来到队列的顺序中的消息,但对于服务Id源。
如果我没有理解好,你要加载根据服务Id平衡你的消息,并且serviceIds是事先不知道。
我建议这里的解决方案是有一个直接交流,具有路由键,如xxxxx.<serviceId>
。然后,您可以通过服务Id一个队列绑定(即:一个队列服务A,一个用于服务B,...),每一个消费者消费上的所有队列。
然后,你必须处理出版商订阅:我会做一个出版商发布的“hello”消息,该消息是由每一个消费者,这反过来又结合新的队列,用于服务(使用xxxxx.<newServiceId>
)消耗,最后发布回一个响应(使得发布者可以开始发送消息)。
注:每个服务队列是所有消费者一样,导致工人配置(见this tutorial)
希望这可以帮助。