我们正在尝试使用ActiveMQ运行JMS应用程序,我们遇到了消息接收器的问题。请查看应用程序和测试使用的以下过程。
即使队列中存在可以使用activemq控制台浏览的消息,应用程序也看不到它,并且在队列中没有收到任何消息。即使对于单个输入消息也会发生此问题,我已经尝试了在支持网站上建议的所有配置选项,但没有任何作用。这就是我的activemq.xml代理标记现在的样子:
<?xml version="1.0" encoding="UTF-8"?>
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" persistent="true" dataDirectory="${activemq.data}" schedulePeriodForDestinationPurge="10000" deleteAllMessagesOnStartup="true">
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" maxPageSize="5000" gcInactiveDestinations="true" inactiveTimoutBeforeGC="300000">
<pendingMessageLimitStrategy>
<constantPendingMessageLimitStrategy limit="1000" />
</pendingMessageLimitStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
<managementContext>
<managementContext createConnector="false" />
</managementContext>
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb" />
</persistenceAdapter>
</broker>
有人可以建议我遗失的任何内容吗?
编辑:
这是接收者代码
private javax.jms.Message getMessageFromQueue(String jmsCorrelationID, String queueName)
throws JMSException, EdiRoutingException, DcQueueNameMapperException {
String messageSelector = "JMSCorrelationID = '" + jmsCorrelationID + "'";
javax.jms.Message message = jmsTemplate.receiveSelected(queueName, messageSelector);
if(null != message) {
TextMessage textMessage = (TextMessage) message;
auditMessage("DATA", textMessage.getText());
}
return message;
}
这是生产者代码:
public void sendMessage(String queueName, final String jmsCorrelationId, final String message) {
jmsTemplate.send(queueName, session -> {
TextMessage textMessage = session.createTextMessage(message);
if (StringUtils.isNotBlank(jmsCorrelationId)) {
textMessage.setJMSCorrelationID(jmsCorrelationId);
}
return textMessage;
});
}