Rabbit MQ检测到消费者代码中没有生产者

时间:2018-12-09 13:26:51

标签: c# rabbitmq rabbitmq-exchange

我有一个生产者和许多消费者的Rabbitmq设置。

最佳做法是什么告诉消费者生产者由于崩溃或其他一些失败而无法发送?

如果生产者发生故障,我想通知并向所有消费者显示合适的消息。

2 个答案:

答案 0 :(得分:1)

没有自动的方法来执行此操作,但是通常,消息系统旨在将生产者和消费者分离。基本思想是,消费者对生产者一无所知。

说,您应该处理生产者崩溃并可能采用publish confirm的策略,因为您希望对生产者有更多的控制权

答案 1 :(得分:0)

我知道现在回答你的问题有点晚了,但这是我让消费者​​知道生产者还活着的方法:例如,你可以在任务中添加一条 ping 消息,该消息将每 X 秒发布到 RabbitMQ。< /p>

此解决方案与从 RMQ 返回的 ACKS 一起使用,并且在您有大量消息传入时有效。使用 ACKS 不会影响您的性能

以C#中的代码为例:

...
m_mainTimer = new System.Timers.Timer();
m_mainTimer.Interval = 10000;   // every 10 secs
m_mainTimer.Elapsed += m_mainTimer_Elapsed;
m_mainTimer.AutoReset = false;  // makes it fire only once
m_mainTimer.Start(); // Start
...
void m_mainTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e){
     try {
          // send to RMQ
          sendMessageToRabbitMQ("PING", "error");
          m_timerTaskSuccess = true;
     } catch (Exception ex) {
          m_timerTaskSuccess = false;
     } finally {
          if (m_timerTaskSuccess) {
                m_mainTimer.Start();
          }
     }
}

RMQ 中的实际消息:

{
  "Message": "PING",
  "Timestamp": 1620303014184
}

如果您在 11 秒内没有收到此消息,则说明存在问题。

我希望它也能帮助其他人。