activemq客户端未从队列接收消息

时间:2017-05-18 08:07:00

标签: activemq

我们正在尝试使用ActiveMQ运行JMS应用程序,我们遇到了消息接收器的问题。请查看应用程序和测试使用的以下过程。

  1. 基于调度程序的JMS应用程序启动
  2. 将持久的activemq测试消息放入队列
  3. 计划的事件尝试从队列接收消息(这不是消费者,但它只是接收者jmsTemplate.receive(队列))
  4. 即使队列中存在可以使用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="&gt;" 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;
            });
        }
    

0 个答案:

没有答案