[英]Whats the difference between message listeners and jmslistener annotation
因此,我正在深入研究 JMS 的世界。 我现在正在编写一些虚拟项目并了解如何使用消息。 我使用 Active MQ artemis 作为消息代理。
在学习教程时,我偶然发现了一些关于消费消息的内容。 消息侦听器侦听消息和使用@JmsListener
注释之间到底有什么区别?
这是我到目前为止所拥有的:
public class Receiver {
@JmsListener(containerFactory = "jmsListenerContainerFactory", destination = "helloworld .q")
public void receive(String message) {
System.out.println("received message='" + message + "'.");
}
}
@Configuration
@EnableJms
public class ReceiverConfig {
@Value("${artemis.broker-url}")
private String brokerUrl;
@Bean
public ActiveMQConnectionFactory activeMQConnectionFactory(){
return new ActiveMQConnectionFactory(brokerUrl);
}
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(){
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(activeMQConnectionFactory());
factory.setConcurrency("3-10");
return factory;
}
@Bean
public DefaultMessageListenerContainer orderMessageListenerContainer() {
SimpleJmsListenerEndpoint endpoint =
new SimpleJmsListenerEndpoint();
endpoint.setMessageListener(new StatusMessageListener("DMLC"));
endpoint.setDestination("helloworld.q"); //Try renaming this and see what happens.
return jmsListenerContainerFactory()
.createListenerContainer(endpoint);
}
@Bean
public Receiver receiver() {
return new Receiver();
}
}
public class StatusMessageListener implements MessageListener {
public StatusMessageListener(String dmlc) {
}
@Override
public void onMessage(Message message) {
System.out.println("In the onMessage().");
System.out.println(message);
}
}
根据我的阅读,我们向容器侦听器注册了一个消息侦听器,而容器侦听器又由侦听器工厂创建。 所以基本上流程是这样的: DefaultJmsListenerContainerFactory -> 创建 -> DefaultMessageListenerContainer -> 注册一个消息侦听器,用于侦听来自配置的端点的消息。 根据我的研究,我收集到 messageListener 用于异步使用来自队列/主题的消息,而使用@JmsListener
注释用于同步收听消息?
此外,还有一些其他的ListenerContainerFactory
,例如DefaultJmsListenerContainerFactory
和SimpleJmsListenerContainerFactory
但不确定我是否明白其中的区别。 我正在阅读https://codenotfound.com/spring-jms-listener-example.html并且从我收集的内容来看,默认使用拉 Z20F35E630DAF44DBFA4C3F68F5399D8 那么我们建议使用消息时为什么会这么说?通过 messageListener 或注释? 我有点困惑和困惑,所以希望我的疑虑能够被清除。 谢谢!
这是发送 100 条虚拟消息时的程序片段(只是注意到它没有输出偶数消息..):
received message='This the 95 message.'.
In the onMessage().
ActiveMQMessage[ID:006623ca-d42a-11ea-a68e-648099ad9459]:PERSISTENT/ClientMessageImpl[messageID=24068, durable=true, address=helloworld.q,userID=006623ca-d42a-11ea-a68e-648099ad9459,properties=TypedProperties[__AMQ_CID=00651257-d42a-11ea-a68e-648099ad9459,_AMQ_ROUTING_TYPE=1]]
received message='This the 97 message.'.
In the onMessage().
ActiveMQMessage[ID:006ba214-d42a-11ea-a68e-648099ad9459]:PERSISTENT/ClientMessageImpl[messageID=24088, durable=true, address=helloworld.q,userID=006ba214-d42a-11ea-a68e-648099ad9459,properties=TypedProperties[__AMQ_CID=0069cd51-d42a-11ea-a68e-648099ad9459,_AMQ_ROUTING_TYPE=1]]
received message='This the 99 message.'.
以下配置
@Configuration
@EnableJms
public class ReceiverConfig {
//your config code here..
}
将确保每次在名为"helloworld.q"
的目标上收到消息时,都会使用消息的内容调用Receiver.receive()
。
您可以在此处阅读更多信息: https://docs.spring.io/spring/docs
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.