首页 > 解决方案 > JMSTemplate receive() : 如果为空则立即返回

问题描述

我正在使用 JMSTemplate.receive(String destName) 方法从队列接收消息。我面临的问题是当队列为空时该方法将无限等待。为此我添加了一个超时参数,但是这个超时会增加延迟,这是不可取的。

Q1。如果队列为空,我该怎么做才能接收立即返回。

Q2。假设如果我添加 1 毫秒的超时值,如果我的消息很大并且获取时间超过 1 毫秒,这是否会导致问题。

标签: javajms

解决方案


A1。使用 JMS API 调用receiveNoWait()

A2。根据我对 JMS 规范的理解,超时是客户端开始接收消息。receive()这不是返回所需的总时间。因此,我不希望您遇到 1 毫秒超时和接收“大”消息的问题。也就是说,这里的 JMS 实现可能会有所不同,因此值得进行测试以确定。


推荐阅读