aks*_*mit 4 java activemq-classic jms message-queue
根据消息的相应JMS ID选择消息的正确语法是什么?
目前,我使用:
String selector = "JMSMessageID='ID:305:1:5:1:1'";
messageConsumer = session.createConsumer(getRetryQueue(), selector);
Run Code Online (Sandbox Code Playgroud)
上面的语法可以在模拟代理中进行测试。但是,对于ActiveMQ,不会轮询消息。
原始代码:
@Override
public Message readMessageFromRetryQueueByJmsId(String jmsId) throws QueueingException {
Connection connection = null;
Session session = null;
MessageConsumer messageConsumer = null;
Message message = null;
try {
connection = getConnectionFactory().createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
messageConsumer = session.createConsumer(getRetryQueue(), "JMSMessageID='"+jmsId+"'");
message = messageConsumer.receiveNoWait();
} catch (JMSException e) {
throw new QueueingException("Failed to read message from MessageConsumer.");
} finally {
try { messageConsumer.close(); } catch (Exception e) { /* NOP */ }
try { session.close(); } catch (Exception e) { /* NOP */ }
try { connection.close(); } catch (Exception e) { /* NOP */ }
}
return message;
}
Run Code Online (Sandbox Code Playgroud)
由于从未启动连接,因此未读取消息。
更正的代码:
@Override
public Message readMessageFromRetryQueueByJmsId(String jmsId) throws QueueingException {
Connection connection = null;
Session session = null;
MessageConsumer messageConsumer = null;
Message message = null;
try {
connection = getConnectionFactory().createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
connection.start();
messageConsumer = session.createConsumer(getRetryQueue(), "JMSMessageID='"+jmsId+"'");
message = messageConsumer.receiveNoWait();
} catch (JMSException e) {
throw new QueueingException("Failed to read message from MessageConsumer.");
} finally {
try { connection.close(); } catch (Exception e) {}
}
return message;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8320 次 |
| 最近记录: |