2017-02-23 11 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メソッドが値を返す必要があります。

やあなたのプロデューサーは、メッセージがorignalMessageIdのようないくつかのプロパティにアクセスすることによって消費されたときに通知されるようにActiveMQ.Advisory.MessageConsumed.Queueに加入させる、ここで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()); 
       } 
      });