使用 MassTransit 在 Mediator ConsumeContext 范围内发布/发送

问题描述

在我的 ASP.NET 核心控制器中,我使用 IMediator.Send 发送一个命令

await mediator.Send(new SubmitOrder());

SubmitOrder 的消费者看起来像这样

public class SubmitOrderConsumer : IConsumer<SubmitOrder>
{
    public async Task Consume( ConsumeContext<SubmitOrder> context )
    {
        var sendEndpoint = await context.GetSendEndpoint( new Uri( "rabbitmq://localhost/notification-service" ) );
        await sendEndpoint.Send( new NotifyOrderSubmitted() );
    }
}

向传输发送消息会导致错误消息

Masstransit.MessageNotConsumedException: 'loopback://localhost/mediator => The message was not consumed'

发布一个 dot 会在 RabbitMQ 上添加一条消息

有没有办法用 ConsumeContext 来做到这一点,而不是注入 IBusControlIBus,因为我想保留消息线程的上下文

解决方法

在Mediator 内消费消息时,接口都是与Mediator 相关的。要跳转从中介到总线,您需要通过对消费者的依赖注入来引用总线(通过 IBus)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...