jmsmessagingtemplate
时间: 2023-04-26 08:05:25 浏览: 53
jmsmessagingtemplate是一个Java消息服务(JMS)的模板类,它提供了一种简单的方式来发送和接收JMS消息。它可以用于发送和接收文本消息、字节消息、Map消息、对象消息等。使用jmsmessagingtemplate可以简化JMS编程,提高开发效率。
相关问题
详细说一下一下代码:package com.mcloud.market.mq; import com.mcloud.common.constant.Constants; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.command.ActiveMQQueue; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jms.config.JmsListenerContainerFactory; import org.springframework.jms.config.SimpleJmsListenerContainerFactory; import org.springframework.jms.core.JmsMessagingTemplate; import javax.jms.ConnectionFactory; import javax.jms.Queue; @Configuration public class ActiveMQConfig { @Value("${spring.activemq.broker-url}") private String brokerUrl; @Value("${spring.activemq.user}") private String username; @Value("${spring.activemq.password}") private String password; @Bean public Queue queue() { return new ActiveMQQueue(Constants.PREFIX + ".amount"); } @Bean(name = "messageQueue") public Queue amountQueue() { return new ActiveMQQueue(Constants.PREFIX + ".message"); } // 在Queue模式中,对消息的监听需要对containerFactory进行配置 @Bean("queueListener") public JmsListenerContainerFactory<?> queueJmsListenerContainerFactory(ConnectionFactory connectionFactory) { SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); factory.setPubSubDomain(false); return factory; } @Bean public ConnectionFactory connectionFactory() { return new ActiveMQConnectionFactory(username, password, brokerUrl); } @Bean public JmsMessagingTemplate jmsMessageTemplate() { return new JmsMessagingTemplate(connectionFactory()); } }
这段代码是一个 Spring Boot 应用中的 ActiveMQ 配置类。主要做了以下几件事情:
1. 定义了两个消息队列,一个是 "amount",另一个是 "message",它们分别对应了两个不同的业务场景。这里使用了 ActiveMQQueue 类来创建队列实例。
2. 定义了一个名为 "queueListener" 的 JmsListenerContainerFactory,用于监听消息队列。在 Queue 模式下,需要对 containerFactory 进行配置,以便正确监听队列中的消息。
3. 定义了一个 ConnectionFactory 实例,用于创建 JMS 连接。在这里使用了 ActiveMQConnectionFactory,它需要传入 ActiveMQ 服务的 URL、用户名和密码。
4. 定义了一个 JmsMessagingTemplate 实例,用于发送 JMS 消息。在这里使用 connectionFactory() 方法获取 ConnectionFactory 实例,并传入 JmsMessagingTemplate 的构造方法中。
这个配置类的作用就是为了在应用中集成 ActiveMQ,以方便发送和接收 JMS 消息。其中,定义了两个消息队列和一个 JmsListenerContainerFactory,可以根据具体业务场景来使用不同的队列和监听器。同时,也定义了一个 JmsMessagingTemplate 实例,可以方便地使用 JMS 发送消息。
请用中文解释一下这段代码,并对每一行代码作注释,要求尽可能详细: @Component public class ActiveMQProducer implements MqProducer { @Override public void sendDelayMessage(String queue, Serializable data, long millis) { JmsTemplate template = ApplicationUtil.getBean(JmsTemplate.class); template.send(queue, session -> { Message msg = session.createObjectMessage(data); msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, millis); msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, 1000); msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, 1); return msg; }); } @Override public void sendMessage(String queue, Serializable data) { JmsMessagingTemplate template = ApplicationUtil.getBean(JmsMessagingTemplate.class); template.convertAndSend(queue, data); } @Override public void sendDelayMessage(String queue, long millis) { JmsTemplate template = ApplicationUtil.getBean(JmsTemplate.class); template.send(queue, session -> { Message msg = session.createTextMessage(); msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, millis); msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, 1000); msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, 1); return msg; }); } @Override public void sendMessage(String queue) { JmsTemplate template = ApplicationUtil.getBean(JmsTemplate.class); template.send(queue, Session::createTextMessage); } }
这段代码是一个 ActiveMQ 消息队列的生产者的实现类,实现了一个 MqProducer 接口,其中 MqProducer 是一个消息队列生产者的接口。
1. @Component
这是一个 Spring Framework 的注解,被注解的类会被 Spring 自动扫描并创建实例,使其可以被 Spring 容器所管理。
2. public class ActiveMQProducer implements MqProducer
声明一个名为 ActiveMQProducer 的类,实现了 MqProducer 接口。
3. @Override
这是一个标识性注解,用于标识该方法是重写父类或接口中的方法。
4. public void sendDelayMessage(String queue, Serializable data, long millis)
声明了一个名为 sendDelayMessage 的方法,该方法实现了 MqProducer 接口中的 sendDelayMessage 方法。它有三个参数:queue 表示消息队列的名称,data 表示要发送的消息数据,millis 表示消息发送的延迟时间。
5. JmsTemplate template = ApplicationUtil.getBean(JmsTemplate.class);
使用 ApplicationUtil 工具类获取一个 JmsTemplate 实例,JmsTemplate 是 Spring Framework 提供的用于发送和接收 JMS 消息的核心类。
6. template.send(queue, session -> {
使用获取到的 JmsTemplate 实例发送消息,其中 queue 表示要发送的消息队列名称,session -> {} 表示一个回调函数,用于创建消息。
7. Message msg = session.createObjectMessage(data);
使用 session 创建一个 ObjectMessage 消息,并将 data 作为其中的消息数据。
8. msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, millis);
设置消息的延迟发送时间,使用了 ActiveMQ 提供的 ScheduledMessage.AMQ_SCHEDULED_DELAY 属性。
9. msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, 1000);
设置消息发送的周期,使用了 ActiveMQ 提供的 ScheduledMessage.AMQ_SCHEDULED_PERIOD 属性。
10. msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, 1);
设置消息发送的重复次数,使用了 ActiveMQ 提供的 ScheduledMessage.AMQ_SCHEDULED_REPEAT 属性。
11. return msg;
返回创建好的消息。
12. public void sendMessage(String queue, Serializable data)
声明了一个名为 sendMessage 的方法,该方法实现了 MqProducer 接口中的 sendMessage 方法。它有两个参数:queue 表示消息队列的名称,data 表示要发送的消息数据。
13. JmsMessagingTemplate template = ApplicationUtil.getBean(JmsMessagingTemplate.class);
使用 ApplicationUtil 工具类获取一个 JmsMessagingTemplate 实例,JmsMessagingTemplate 是 Spring Framework 提供的用于发送和接收 JMS 消息的高级类。
14. template.convertAndSend(queue, data);
使用获取到的 JmsMessagingTemplate 实例发送消息,并将 data 作为其中的消息数据。
15. public void sendDelayMessage(String queue, long millis)
声明了一个名为 sendDelayMessage 的方法,该方法实现了 MqProducer 接口中的 sendDelayMessage 方法。它有两个参数:queue 表示消息队列的名称,millis 表示消息发送的延迟时间。
16. JmsTemplate template = ApplicationUtil.getBean(JmsTemplate.class);
使用 ApplicationUtil 工具类获取一个 JmsTemplate 实例。
17. template.send(queue, session -> {
使用获取到的 JmsTemplate 实例发送消息,其中 queue 表示要发送的消息队列名称,session -> {} 表示一个回调函数,用于创建消息。
18. Message msg = session.createTextMessage();
使用 session 创建一个 TextMessage 消息。
19. msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, millis);
设置消息的延迟发送时间。
20. msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, 1000);
设置消息发送的周期。
21. msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, 1);
设置消息发送的重复次数。
22. return msg;
返回创建好的消息。
23. public void sendMessage(String queue)
声明了一个名为 sendMessage 的方法,该方法实现了 MqProducer 接口中的 sendMessage 方法。它有一个参数:queue 表示消息队列的名称。
24. JmsTemplate template = ApplicationUtil.getBean(JmsTemplate.class);
使用 ApplicationUtil 工具类获取一个 JmsTemplate 实例。
25. template.send(queue, Session::createTextMessage);
使用获取到的 JmsTemplate 实例发送消息,并使用 Session::createTextMessage 方法创建消息。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)