Silverback发布Dog类型消息至错误Kafka Topic问题求助
解决Silverback发布子类消息时多主题重复发送的问题
问题根源在于Silverback默认的消息类型匹配策略——它默认会包含所有派生类型(MessageTypeMatch.IncludeDerived)。因为Dog继承自Animal,发布Dog实例时,Silverback会同时匹配到Animal和Dog对应的主题映射,所以会在两个主题各发送一条消息。
下面是两种直接有效的解决方法:
方法1:在端点配置中指定精确匹配
修改Kafka端点配置,给Animal的出站映射加上MatchExactType(),让它仅处理Animal本身的实例,排除所有子类:
services .AddSilverback() .WithConnectionToMessageBroker(options => options.AddKafka()) .AddKafkaEndpoints(endpoints => endpoints .AddOutbound<Animal>(endpoint => endpoint .MatchExactType() // 关键:仅匹配Animal类型,不包含派生类 .ProduceTo("animals")) .AddOutbound<Dog>(endpoint => endpoint .ProduceTo("dogs")));
方法2:使用特性标注指定匹配规则
如果是通过特性绑定消息与主题,在Animal类的[KafkaTopic]特性里明确设置MatchType = MessageTypeMatch.Exact:
[KafkaTopic("animals", MatchType = MessageTypeMatch.Exact)] public class Animal { } [KafkaTopic("dogs")] public class Dog : Animal { }
配置完成后,发布Dog实例时只会触发dogs主题的映射,不会再往animals主题发送重复消息。
内容的提问来源于stack exchange,提问作者Elia Lombardi
相关产品推荐
相关产品推荐

