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

问题描述 投票:0回答:2

在我的 ASP.NET Core 控制器中,我使用 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'

发布一条消息不会添加到 RabbitMQ 上

有没有办法用

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

rabbitmq microservices masstransit mediator
2个回答
1
投票

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

IBus
)。


0
投票

大众交通文档

中所述

Send 期望消息被消费。如果没有消费者 配置消息类型,会抛出异常。

另一方面,发布不需要消息被消费并且 如果消息未被消耗,则不会抛出异常。扔一个 发布的消息没有被消费时出现异常,设置Mandatory PublishContext 上的属性为 true。

© www.soinside.com 2019 - 2024. All rights reserved.