配置MassTransit识别自定义消费者包装类及解决消息跳过问题
问题:如何让MassTransit识别自定义的消费者包装类?
项目结构
- WrapperMassTransit类库:封装MassTransit相关依赖、配置逻辑,核心目标是让消费者应用与MassTransit底层逻辑解耦
- 消费者应用:依赖WrapperMassTransit类库,实现具体的消息消费逻辑
WrapperMassTransit类库的核心包装实现
类库中定义了两个包装接口,用于封装MassTransit的原生类型:
1. IConsumer的包装接口
public interface IWrapperConsumer<TMessage> : IConsumer where TMessage : class { Task Consume(WrapperConsumeContext<TMessage> context); }
2. ConsumeContext的包装接口
public interface WrapperConsumeContext<T> : ConsumeContext<T> where T : class { }
消费者应用的预期实现
在消费者应用中,基于自定义的包装接口实现消费者:
public class MessageConsumer : IWrapperConsumer<Message> { public async Task Consume(WrapperConsumeContext<Message> context) { // 业务处理逻辑 } }
当前问题
只有直接使用MassTransit原生的*IConsumer*和*ConsumeContext*接口时,消息才能正常入队并触发Consume方法。使用自定义的包装接口时,消息完全无法被消费,Consume方法也不会被触发。
曾尝试在startup.cs中通过AutoMapper做接口映射,但没有效果。想确认是否可以通过配置MassTransit,使其将自定义的包装类识别为合法的消费者和消费上下文?
编辑补充:尝试后的新问题
根据Chris提供的方案,改用类似单元测试的实现方式,但消息仍然进入跳过队列。当前接收端点配置代码如下:
busFactoryConfigurator.ReceiveEndpoint("message-endpoint", e => { e.Consumer(typeof(MessageConsumer), type => new MessageConsumer()); });
对应的消费者实现:
public class MessageConsumer : IHandler<Message> { public async Task Handle(Message message) { } }
请问我遗漏了哪些配置步骤?
内容的提问来源于stack exchange,提问作者zed101
相关产品推荐
相关产品推荐

