【问题标题】:How does MQ Light assure that message is not removed from queue if app crashes during processing?如果应用程序在处理过程中崩溃,MQ Light 如何确保消息不会从队列中删除?
【发布时间】:2016-04-22 07:52:02
【问题描述】:

在发送消息确认之前,接收应用程序如何控制消息不从队列中取出?例如,在接收应用程序收到消息并崩溃的情况下,从 MQ 角度来看,消息已经发送,但接收应用程序尚未处理它,从这个意义上说,有可能丢失消息。有没有一种方法可以控制 MQ 何时从队列中取出该消息?

从发送应用程序的角度来看类似的问题,Bluemix 上 MQ Light 的 SLA 是什么,所以如果 MQLight 出现故障,发送应用程序是否应该继续重新发送(持续多长时间)消息。发送应用程序如何确定 MQLight 接收它?

【问题讨论】:

    标签: ibm-cloud ibm-mq


    【解决方案1】:

    应用可以在订阅调用中使用“服务质量”属性来控制其接收到的消息的传递保证。下面提供了一个很好的细节描述:https://developer.ibm.com/messaging/mq-light/docs/qos/

    总之,如果您的应用需要使用消息确认,那么应该使用“至少一次”的服务质量。如果您需要应用程序自己控制 ack 的发送,还可以使用 autoConfirm 属性进行进一步控制。

    同样,在发送消息时,应用程序可以将发送调用的“服务质量”属性设置为“至少一次”,以接收来自服务器的明确接受/拒绝确认。

    对于服务器在一段时间内不可用的情况,这意味着客户端将继续尝试重新连接并发送消息,直到 (1) 服务器再次可用并接受消息,(2)服务器再次可用并拒绝该消息,(3) 客户端 api 被客户端应用程序更改为停止状态或 (4) 客户端应用程序被终止。在案例 1-3 中,客户将收到结果确认。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 2017-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多