【问题标题】:Duplicated messages sent to MassTransit consumer发送给 MassTransit 消费者的重复消息
【发布时间】:2021-10-16 01:37:38
【问题描述】:

我有一个 MassTransit 示例程序,它发布 1 条正文为当前时间戳的单条消息。然而,奇怪的是,消费者总是恰好有 5 次被调用。

程序如下:

public class MassTransitTest
{
    static void Main(string[] args)
    {
        var bus = ServiceBusFactory.New(x =>
        {
            x.UseRabbitMq();
            x.ReceiveFrom("rabbitmq://localhost/test");
            x.Subscribe(s => s.Consumer(() => new MyConsumer()));
        });

        bus.Publish<IMyObject>(new MyObject { Timestamp = DateTime.Now.ToString("yyyyMMddHHmmssffff"), CorrelationId = Guid.NewGuid() });
    }
}

public interface IMyObject : CorrelatedBy<Guid>
{
    string Timestamp { get; }
}

public class MyObject : IMyObject
{
    public string Timestamp { get; set; }
    public Guid CorrelationId { get; set; }
}

public class MyConsumer : Consumes<IMyObject>.All, IBusService
{
    private IServiceBus bus;

    private static int count = 0; // to gauge the call to handler

    public void Consume(IMyObject message)
    {
        count++;
        Console.WriteLine("Encounter message " + count);
        Console.WriteLine(message.Timestamp);
    }

    public void Start(IServiceBus bus)
    {
        this.bus = bus;
    }

    public void Stop()
    {            
    }

    public void Dispose()
    {
        bus.Dispose();
    }
}

输出如下:

Encounter message 1
201410131349034661
Encounter message 2
201410131349034661
Encounter message 3
201410131349034661
Encounter message 4
201410131349034661
Encounter message 5
201410131349034661

【问题讨论】:

    标签: masstransit


    【解决方案1】:

    您不应在 Consumer 中处理总线,也不应成为 IBusService。 .Dispose 方法可能会抛出异常,导致消费者重试。

    您还应该在程序退出之前等待,并在完成处理后调用 bus.Dispose。

    IBusService start 没有被调用,因为消费者不是总线服务,所以总线成员始终为空。

    【讨论】:

      【解决方案2】:

      在我的例子中,我在调用试图保存数据的方法的消费者中遇到错误,并且我的 catch 也失败了。由于消费者无法发送任何适当的响应成功/失败,消费者试图一遍又一遍地重试。确保您没有在消费者流程中遇到任何错误。

      【讨论】:

        猜你喜欢
        • 2014-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多