【问题标题】:Publishing/Sending in Mediator ConsumeContext scope using MassTransit使用 MassTransit 在 Mediator ConsumeContext 范围内发布/发送
【发布时间】:2021-09-19 13:14:10
【问题描述】:

在我的 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 =&gt; The message was not consumed'

发布一个不添加消息到 RabbitMQ

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

【问题讨论】:

    标签: rabbitmq microservices masstransit mediator


    【解决方案1】:

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

    【讨论】:

    • 这是我怀疑的,这是一种耻辱。我担心的是,即使在与总线相关的消费者中,我团队中的其他开发人员也会默认使用 IBus 发送消息,因为很难追溯到触发消费者的原始接口。你对此有什么建议吗?抱歉,我是 MT 新手
    • 嗯,我的第一个建议是,如果您使用公共汽车,则完全避免使用调解器。我不明白为什么人们试图通过引入这么多不同的抽象来过度混淆行为。
    • 谢谢 Chris,直接从控制器触发消费者的最佳方法是什么?
    • 不,最好从控制器发布SubmitOrder 消息,让消费者通过RabbitMQ 运行——然后它会发布OrderSubmitted 通知。与我在ForkJoint 中所做的非常相似。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多