Java ActiveMQ寄存器侦听器到StompConnection
我正在使用at示例的一个变体从队列接收消息。我试图做的是继续收听队列,并在收到新消息时执行一些操作。问题是我找不到一种方法将侦听器注册到任何相关对象。我试过这样的方法:Java ActiveMQ寄存器侦听器到StompConnection,java,jms,activemq,stomp,Java,Jms,Activemq,Stomp,我正在使用at示例的一个变体从队列接收消息。我试图做的是继续收听队列,并在收到新消息时执行一些操作。问题是我找不到一种方法将侦听器注册到任何相关对象。我试过这样的方法: public static void main(String args[]) throws Exception { StompConnection connection = null; try { connection = new StompConnection(); connec
public static void main(String args[]) throws Exception {
StompConnection connection = null;
try {
connection = new StompConnection();
connection.open("localhost", 61613);
connection.connect("admin", "activemq");
connection.subscribe("/queue/worker", Subscribe.AckModeValues.AUTO);
while (true) {
StompFrame message = connection.receive();
System.out.println(message.getBody());
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
}
}
但这不起作用,因为几秒钟后会发生超时(
java.net.SocketTimeoutException:Read timed out
)。我可以做些什么来无限期地监听这个队列吗?ActiveMQ的StompConnection类是一个相对原始的STOMP客户端。它不能异步回调消息或无限期等待。您可以通过超时来接收,但取决于您是否使用STOMP v1.1,如果没有及时接收到心跳,它仍可能提前超时。当然,您可以随时捕获超时异常并重试
对于通过Java的STOMP,最好使用或类似的工具,其行为类似于真正的JMS客户机,并允许异步消息接收 ActiveMQ的StompConnection类是一个相对原始的STOMP客户端。它不能异步回调消息或无限期等待。您可以通过超时来接收,但取决于您是否使用STOMP v1.1,如果没有及时接收到心跳,它仍可能提前超时。当然,您可以随时捕获超时异常并重试
对于通过Java的STOMP,最好使用或类似的工具,其行为类似于真正的JMS客户机,并允许异步消息接收 @timbish:我尝试了StompJMS,但找不到任何可以使用的示例(也许你可以提供一个链接)。我通过将超时设置为0“修复”了这个问题,这似乎是阻塞。@Tim Bish:我尝试了StompJMS,但找不到任何可以使用的示例(也许您可以提供链接)。我通过将超时设置为0“修复”了这个问题,这似乎是阻塞。即使我也面临同样的问题。。您可以通过向receive()方法添加超时来解决此问题 声明一个长类型变量
long waitTimeOut = 5000; //this is 5 seconds
现在修改您的接收函数,如下所示
StompFrame message = connection.receive(waitTimeOut);
这肯定会奏效的 就连我也面临着同样的问题。。您可以通过向receive()方法添加超时来解决此问题 声明一个长类型变量
long waitTimeOut = 5000; //this is 5 seconds
现在修改您的接收函数,如下所示
StompFrame message = connection.receive(waitTimeOut);
这肯定会奏效的 我相信在源代码树中有一些示例,只需从Git中提取并查看一下。我认为ActiveMQ Apollo还附带了一些使用StompJMS的示例。我相信在源代码树中有一些示例,只需从Git中拉出来看看。我认为ActiveMQ Apollo还附带了一些使用StompJMS的示例。