使用微服务方法,我有服务A有3个实例(A1,A2,A3),可以通过基于AMQP消息的异步通信与服务B通信,服务B有(B1,B2,B3)实例。例如,Azure Service Bus队列。
服务A的行动实施的一部分,我有5个步骤需要注意,5的第2步是联系服务B以获取一些信息并继续进行。
当我有多接收器方法时,服务A的A2实例如何处理来自服务B的响应,而实际请求是由A1实例做出的。
我想知道微服务中多发送方+多接收方法如何处理这些方案。
答案 0 :(得分:1)
为了表明任何服务A实例要处理的任何服务B实例的响应,那么来自B的响应必须包含识别来自A的请求并恢复该过程所需的所有信息,即实体ID,处理ID或最可能对B不透明的东西。
此外,这意味着A1(或任何实例将请求消息发送给B)不应阻止或等待来自B的响应。
答案 1 :(得分:1)
在使用分布式队列的多节点体系结构中,一般方法是使用锁定机制。 假设您有一个要处理的对象/请求,该对象/请求最初被放入队列中。任何实例都可以选择进行处理。你的逻辑应该是:
在这种情况下,如果任何实例在您提到的第二步中选择响应,则不会出现问题。
另一种方法,与锁定一样:
当然,正如@Constantin指出的那样,应该有一个链接将B的响应映射到原始对象。当一个对象可以被多个实例处理时,一致状态是另一个你应该关心的事情。不应该有任何信息存在于特定实例的内存中。