EasyNetQ 中的 C# 许多 onMessage 操作

C# Many onMessage actions in EasyNetQ

我有一个问题。我有一个简单的方法可以创建对 RabbitMQ 总线的订阅并从中读取消息,然后触发适当的 onMessage 操作处理程序,它看起来像:

    this.bus = RabbitHutch.CreateBus("host=localhost;timeout=999;virtualHost=/;username=guest;password=guest");

    void timer1_Tick(object sender, EventArgs e)
    {
       Console.WriteLine($"{DateTime.Now}");
    }

    var subscribeId = "QueueId";
    var running = false;
    var handler = new Action<ResponseMessage>(response =>
    {
        switch (response.Op)
        {
            case "Start":
                timer.AutoReset = true; 
                timer.Elapsed += timer1_Tick;
                timer.Start();
                break;
            default: Console.WriteLine("Default");
                break;
        }
    });

    this.bus.Subscribe<ResponseMessage>(cabinetSubscribeId, handler, sub => sub.WithTopic(cabinetSubscribeId));

好吧,当这将收到一条消息时它工作正常,但如果另一条消息带有 Op 值开始(这可能会发生)我有 2 个处理程序 运行 彼此相邻,它们将递增每条传入的开始消息。

是否可以停止之前的 onMessage 处理程序,或者将其限制为 1 个?

每次消息到达你执行:

 case "Start":
                timer.AutoReset = true; 
                timer.Elapsed += timer1_Tick;
                timer.Start();
                break;

您创建了额外的计时器订阅。所以定时器现在会调用 time_click1 两次。 目前还不清楚为什么你在这里需要一个计时器,但如果你需要那么你需要先取消订阅以前的,也应该是线程圣人,所以在这段代码周围加上锁声明

 case "Start":
                timer.AutoReset = true; 
                timer.Elapsed -= timer1_Tick;
                timer.Elapsed += timer1_Tick;
                timer.Start();