【发布时间】:2019-07-20 16:35:46
【问题描述】:
我正在尝试使用 Kafka 实现请求/回复模式。我正在使用向这些服务发送消息的命名服务和未命名客户端,并且客户端可能希望得到回复。许多 (10s-100s) 客户端可能与单个服务或服务消费组交互。
策略一:过滤消息
第一个想法是每个服务有两个主题——“HelloWorld”服务将使用“HelloWorld”主题,并产生对“HelloWorld-Reply”主题的回复。客户端将使用该回复主题并过滤唯一的消息 ID,以了解哪些回复与他们相关。
其中的缺点是,当许多客户端与一项服务交互时,它似乎可能会给客户端带来不必要的工作,以过滤掉大量潜在的不相关消息。
策略二:临时主题
第二个想法是为每个客户端创建一个唯一 ID,并将该 ID 与消息一起发送。客户端将使用他们自己的唯一主题“[ClientID]”,并且服务会在收到回复时发送到该主题。因此,客户端不必过滤不相关的消息。
缺点是客户端的生命周期可能较短,例如它们可能是一次性脚本,他们必须事先创建主题并在之后将其删除。如果客户端在处理期间死亡,可能需要一些额外的过程来清除未使用的客户端主题。
其中哪一个看起来更好?
【问题讨论】:
-
我一直有同样的想法,并决定使用 NATS 来代替,因为它在设计上支持请求-回复模式,并带来了更多好处。 docs.nats.io/nats-concepts/reqreply
标签: apache-kafka microservices