Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring JMS生产者和消费者交互_Java_Spring_Spring Mvc_Spring Jms - Fatal编程技术网

Java Spring JMS生产者和消费者交互

Java Spring JMS生产者和消费者交互,java,spring,spring-mvc,spring-jms,Java,Spring,Spring Mvc,Spring Jms,如何确定使用者是否已从生产者收到消息,或者如何通知生产者消息已在SpringJMS中发送/使用?您需要使用org.springframework.JMS.core.JmsTemplate.sendAndReceive(…)来使用请求/回复在生产者端和消费者端,容器中设置的MessageListener方法必须返回一个值 或者让制作人订阅ActiveMQ.Advisory.MessageConsumed.Queue要在消息被使用时通过访问一些属性(如orignalMessageId)得到通知,请查

如何确定使用者是否已从生产者收到消息,或者如何通知生产者消息已在SpringJMS中发送/使用?

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

或者让制作人订阅
ActiveMQ.Advisory.MessageConsumed.Queue
要在消息被使用时通过访问一些属性(如
orignalMessageId
)得到通知,请查看此处

您可以这样使用它:

            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());
                }
            });

如果您只想通知,则可以使用自动确认模式,但如果您需要在异常情况下重新交付,则应使用Transact=“true”。这一点已经在SO提出。选中此项: