2017-02-23 84 views
0

如何确定消费者是否已收到来自生产者的消息,或者如何通知生产者消息已在Spring JMS中发送/消耗?Spring JMS生产者和消费者互动

+0

如果你只是想通知,那么你可以使用AUTO_ACK模式,但如果你需要在异常情况下重新交付,那么你应该使用transacted =“true”。这已经在SO上被问到了。检查此:http://stackoverflow.com/questions/9095471/getting-a-simple-spring-jms-client-acknowledge-to-work – Tarun

回答

0

您需要在生产者端和消费者端使用org.springframework.jms.core.JmsTemplate.sendAndReceive(...)的请求/回复,容器中设置的MessageListener方法必须返回一个值。

或使生产者订阅ActiveMQ.Advisory.MessageConsumed.Queue当消息是由具有类似于orignalMessageId获得一些性能消耗通知,采取这里http://activemq.apache.org/advisory-message.html

一看,你可以使用它像这样:

  Destination advisoryDestination = org.apache.activemq.advisory.AdvisorySupport 
        .getMessageConsumedAdvisoryTopic(session.createQueue("yourQueue")); 
      MessageConsumer consumer = session.createConsumer(advisoryDestination); 
      consumer.setMessageListener(new MessageListener() { 
       @Override 
       public void onMessage(Message msg) { 
        System.out.println(msg); 
        System.out.println(((ActiveMQMessage) msg).getMessageId()); 
        ActiveMQMessage aMsg = (ActiveMQMessage) ((ActiveMQMessage) msg).getDataStructure(); 
        System.out.println(aMsg.getMessageId()); 
       } 
      });