如何正确从队列IBM MQ接收消息

时间:2019-02-21 09:58:28

标签: java jms ibm-mq

此代码应从队列中读取,如果队列为空,则通过计时器重复读取以检查文本或字节的格式。以这种格式检查空队列是否正确?计时器在这种情况下会工作吗? 由于尚未配置MQ队列,因此无法检查。

$("#videotesting1").attr("src","{{url_for('static',filename='videoTest/'" + fileInput +")}}");'

2 个答案:

答案 0 :(得分:0)

请注意,您的receiver.receive();通话将无限期屏蔽。来自MQMessageConsumer文档:

  

接收为此消息使用者生成的下一条消息。这个   无限期地阻止呼叫,直到产生消息或直到此消息为止   邮件使用者已关闭。

如果您想在指定的时间内读取队列,也许最好使用receive(long timeout)方法:

  

公共javax.jms.Message接收(长时间超时)                             抛出javax.jms.JMSException

     

接收在指定的超时时间内到达的下一条消息   间隔。该调用将阻塞,直到消息到达为止,即超时   过期,或者此消息使用方已关闭。零永不超时   过期,通话会无限期地阻塞。

答案 1 :(得分:0)

除非需要使用计时器,否则我更喜欢使用receive(timeout)。如果队列中有一条消息,则接收调用将返回一条消息,否则它将超时,并抛出2033个原因代码。您可以捕获此异常,然后再次调用接收以等待消息。这也将允许您在被询问时停止该线程。

执行(TextMessage) receiver.receive()而不是Message msg = receiver.receive(),然后使用if(msg instanceof TextMessage)确定收到的消息类型。