如果应用程序在处理过程中崩溃,MQ Light 如何确保消息不会从队列中删除?
How does MQ Light assure that message is not removed from queue if app crashes during processing?
接收应用程序如何控制在发送消息确认之前不将消息从队列中取出?例如,接收应用程序收到消息并崩溃的场景 post,从 MQ 的角度来看,消息已经发送,但接收应用程序尚未处理它,从这个意义上说,有可能丢失消息。有没有一种方法可以控制 MQ 何时从队列中取出该消息?
从发送应用程序的角度来看类似的问题,Bluemix 上 MQ Light 的 SLA 是什么,因此如果 MQLight 出现故障,发送应用程序是否应该继续重新发送(多长时间)消息。发送应用程序如何确定 MQLight 收到它?
应用程序可以在订阅调用中使用 'Quality of service' 属性 来控制它收到的消息的传递保证。下面提供了很好的细节说明:https://developer.ibm.com/messaging/mq-light/docs/qos/
总而言之,如果您的应用需要使用消息确认,则应使用 'Atleast once' 服务质量。如果您需要应用程序来控制 ack 本身的发送,则还可以使用 autoConfirm 属性 进一步控制。
同样,在发送消息时,应用程序可以将发送调用的 'Quality of service' 属性 设置为 'Atleast once' 以接收来自服务器的显式 accepted/rejected 确认。
对于服务器一段时间不可用的情况,这意味着客户端将继续尝试重新连接并发送消息,直到 (1) 服务器再次可用并接受消息,( 2) 服务器再次可用并拒绝消息,(3) 客户端 api 被客户端应用程序更改为停止状态,或者 (4) 客户端应用程序被终止。在情况 1-3 中,客户将收到结果确认。
接收应用程序如何控制在发送消息确认之前不将消息从队列中取出?例如,接收应用程序收到消息并崩溃的场景 post,从 MQ 的角度来看,消息已经发送,但接收应用程序尚未处理它,从这个意义上说,有可能丢失消息。有没有一种方法可以控制 MQ 何时从队列中取出该消息?
从发送应用程序的角度来看类似的问题,Bluemix 上 MQ Light 的 SLA 是什么,因此如果 MQLight 出现故障,发送应用程序是否应该继续重新发送(多长时间)消息。发送应用程序如何确定 MQLight 收到它?
应用程序可以在订阅调用中使用 'Quality of service' 属性 来控制它收到的消息的传递保证。下面提供了很好的细节说明:https://developer.ibm.com/messaging/mq-light/docs/qos/
总而言之,如果您的应用需要使用消息确认,则应使用 'Atleast once' 服务质量。如果您需要应用程序来控制 ack 本身的发送,则还可以使用 autoConfirm 属性 进一步控制。
同样,在发送消息时,应用程序可以将发送调用的 'Quality of service' 属性 设置为 'Atleast once' 以接收来自服务器的显式 accepted/rejected 确认。
对于服务器一段时间不可用的情况,这意味着客户端将继续尝试重新连接并发送消息,直到 (1) 服务器再次可用并接受消息,( 2) 服务器再次可用并拒绝消息,(3) 客户端 api 被客户端应用程序更改为停止状态,或者 (4) 客户端应用程序被终止。在情况 1-3 中,客户将收到结果确认。