【发布时间】:2021-04-08 08:27:33
【问题描述】:
很少有消费者在听一个 Kafka 主题。消息有一个参数,通过该参数可以确定哪个消费者需要使用它。 MassTransit 使用什么机制来实现这样的解决方案?
【问题讨论】:
很少有消费者在听一个 Kafka 主题。消息有一个参数,通过该参数可以确定哪个消费者需要使用它。 MassTransit 使用什么机制来实现这样的解决方案?
【问题讨论】:
作为explained in the interoperability documentation,MassTransit 使用messageType 标头来确定序列化消息正文中存在哪些消息类型。如果没有消息类型,比如使用 RawJson 消息反序列化器时,它会将消息传递给所有注册的消费者。
现在,对于 Kafka,类型本身是 TopicEndpoint 配置的一部分,因此只有该消息类型被分派到端点。根据序列化(AVRO、Json 等),体验取决于消息类型是否可用。
您当然可以编写自己的反序列化器,使用该参数来确定消息中包含哪些消息类型,并编写您自己的反序列化器以使用支持的类型正确响应TryGetMessage<T>。最好的例子是 JsonConsumeContext 或最近更新的 RawJsonConsumeContext,现在支持用于消息识别的传输标头。
【讨论】: