rabbitmq 使用Mastransit将使用的消息从使用方发送到生成方

6yoyoihd  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(1)|浏览(209)

我从Producer项目向Consumer项目发送了一条消息。然后,当我收到第一条消息时,我想从Consumer项目向Producer项目发送一条不同的消息。我使用下面的代码来完成此操作。

public class CommandMessageConsumer : IConsumer<CommandMessage>
{
    public async Task Consume(ConsumeContext<CommandMessage> context)
    {
        // I'm getting the message Consumer -> Consumer
        var message = context.Message;
        await Console.Out.WriteLineAsync($"Message from Producer : {message.MessageString}");

        // I'm sending the message Consumer -> Consumer
        _ = context.Publish(new CommandMessage(message.Id, message.MessageString));
    }
}

我收到了消费者-〉生产者的消息,但问题是它继续发送,并没有在控制台上停止。这意味着无限!
此外,Producer服务部分:

public class PCommandMessageConsumer : IConsumer<CommandMessage>
{
    public async Task Consume(ConsumeContext<CommandMessage> context)
    {
        var message = context.Message;
        await Console.Out.WriteLineAsync($"------------------Message from Consumer to Producer : {message.MessageString}");
    }

}
z5btuh9x

z5btuh9x1#

这个问题是由于设置不同的ReceiveEndpoint队列名称引起的。使它们相同(在我的例子中是“samplqueue”)修复了无限循环。我猜使它们不同的队列名称阻止了确认,这导致了发送循环,直到获得接收的确认。

builder.Services.AddMassTransit(mt =>
                    mt.UsingRabbitMq((cntxt, cfg) =>
                    {
                        cfg.Host("localhost", "/", c =>
                        {
                            c.Username("guest");
                            c.Password("guest");
                        });
                        cfg.ReceiveEndpoint("samplequeue", (c) =>
                        {
                            c.Consumer<PCommandMessageConsumer>();
                        });
                    }));

相关问题