activemq 连接池依赖启动时会报 Error creating bean with name 'xxx': Unsatisfied dependency expressed through field 'jmsTemplate SpringJUnit4ClassRunner.class) @SpringBootTest() public class MyMQTest { @Autowired private JmsTemplate jmsTemplate; @Test public void jms() { jmsTemplate.convertAndSend(new ActiveMQQueue
1.1 简介 1.1.1 概述 JMSTemplate 是由 Spring 提供的一个 JMS 消息发送模板(与 JDBCTmplate 类似),可以用来方便地进行消息的发送,消息发送方法 convertAndSend 1.1.2 整合 JMSTemplate ☞ Spring 整合 JMSTemplate ☞ SpringBoot 整合 JMSTemplate 1.2 JMSTemplate 的使用 1.2.1 常用方法 消息接收可以使用消息监听的方式替代模板方法,但是发送的时候是无法代替的,必须使用 Spring 提供的 JmsTemplate 中的方法来进行发送操作。 jmsTemplate; @Test public void jms() { jmsTemplate.convertAndSend(new ActiveMQQueue jmsTemplate; @Test public void recevie() { Object myTest = jmsTemplate.receiveAndConvert
jmsTopicTemplate() { JmsTemplate jmsTemplate = new JmsTemplate(); jmsTemplate.setConnectionFactory (connectionFactory()); jmsTemplate.setPubSubDomain(true); jmsTemplate.setMessageConverter ) public JmsTemplate jmsQueueTemplate() { JmsTemplate jmsTemplate = new JmsTemplate(); jmsTemplate.setConnectionFactory(connectionFactory()); jmsTemplate.setPubSubDomain(false); jmsTemplate.setMessageConverter(jacksonJmsMessageConverter()); return jmsTemplate; }
发送消息: @Component public class MessageProducer { @Autowired private JmsTemplate jmsTemplate (true); // 切换为 Topic 模式 jmsTemplate.convertAndSend("my-topic", message); jmsTemplate.setPubSubDomain @Bean public JmsTemplate jmsTemplate(ConnectionFactory connectionFactory) { JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory); jmsTemplate.setMessageConverter(jacksonJmsMessageConverter 通过合理配置 JmsTemplate 和 @JmsListener,可简化消息生产与消费逻辑。实际应用中需结合监控工具跟踪消息堆积和延迟,并定期清理无效队列防止资源浪费。
import org.springframework.jms.connection.SingleConnectionFactory; import org.springframework.jms.core.JmsTemplate jmsTemplate(SingleConnectionFactory connectionFactory){ JmsTemplate jmsTemplate = new JmsTemplate(); jmsTemplate.setConnectionFactory(connectionFactory); return jmsTemplate; } } 2.3:生产者配置: ? 凯哥Java * * */ @Service("adminLogProducer") public class AdminLogProducer { @Autowired // 也可以注入JmsTemplate ,JmsMessagingTemplate对JmsTemplate进行了封装 private JmsMessagingTemplate jmsTemplate; // 发送消息,destination
-- 队列Template --> <bean id="<em>jmsTemplate</em>" class="org.springframework.jms.core.<em>JmsTemplate</em>"> <property ; private JmsTemplate jmsTemplate; public QueueSender(ActiveMQQueue queue) { this.destination = jmsTemplate) { this.jmsTemplate = jmsTemplate; } } Test.java /** * Servlet implementation class jmsTemplate=(JmsTemplate) ac1.getBean("jmsTemplate"); jmsTemplate.send(new MessageCreator() { ; } }); JmsTemplate topicjmsTemplate=(JmsTemplate) ac1.getBean("topicjmsTemplate"); topicjmsTemplate.send
的Queue类型 ④定义JmsTemplate的Topic类型 ⑤定义Queue监听 ⑥定义Topic监听 代码如下: <! -- Spring JmsTemplate 的消息生产者 start--> <! -- 定义JmsTemplate的Queue类型 --> <bean id="jmsQueueTemplate" class="org.springframework.jms.core.<em>JmsTemplate</em> -- 定义<em>JmsTemplate</em>的Topic类型 --> <bean id="jmsTopicTemplate" class="org.springframework.jms.core.<em>JmsTemplate</em> --Spring <em>JmsTemplate</em> 的消息生产者 end--> <!
251 Q: #17.2.2-1 | Spring的JmsTemplate会捕获标准的JMSException异常,再以Spring的非检查型异常JmsException子类重新抛出。 如下的XML可以完成这项工作: A: <bean id="<em>jmsTemplate</em>" class="org.springframework.jms.core.<em>JmsTemplate</em>" 254 Q: #17.2.2-4 | 与其每次发送消息时都指定一个目的地,不如我们为JmsTemplate装配一个默认的目的地。 A: <bean id="<em>jmsTemplate</em>" class="org.springframework.jms.core.<em>JmsTemplate</em>" c:_-ref="connectionFactory <em>JmsTemplate</em>会处理其他的事情。 ?
JmsTemplate是Spring提供的一个模板,通过该模板为JMS提供支持。使用JmsTemplate能够非常容易地在消息圣蚕房发送队列和订阅消息,在消费消息的哪一方也能非常容易地接收这些消息。 配置方法如下: <bean id="<em>jmsTemplate</em>" class="org.springfarmework.jms.core.<em>JmsTemplate</em>" c:_-ref=" 配置好<em>JmsTemplate</em>后,使用JmsOperation(<em>JmsTemplate</em>所实现的接口)将目标对象发送给消息队列,队列会在稍后得到处理。 <bean id="jmsTemplate" class="org.springfarmework.jms.core.JmsTemplate" c:_-ref="connectionFactory 接收消息比发送消息更为简单,只需要调用JmsTemplate的receice()方法即可。当调用该方法时。JmsTemplate会尝试从消息代理中获取一个消息。
某些业务场景需要消息定时发送或延时发送(类似:飞信的短信定时发送需求),这时候就需要用到activemq的消息延时投递,详细的文档可参考官网说明,本文只介绍二种常用的用法: 注:本文采用spring的JmsTemplate message.setStringProperty(ScheduledMessage.AMQ_SCHEDULED_CRON, corn); } return message; } } 步骤3、jmsTemplate ; jmsTemplate.convertAndSend(message1, new ScheduleMessagePostProcessor("50 22 * * *")); ; Object message2 = "message:" + DateUtil.formatDate(new Date()); jmsTemplate.convertAndSend (message2, new ScheduleMessagePostProcessor(30 * 1000));//延时30秒 jmsTemplate.convertAndSend(message2
property name="targetConnectionFactory" ref="targetConnectionFactory" /> </bean> </beans> (3)配置生产者对象 使用jmsTemplate -- Spring提供的JMS工具类,它可以进行消息发送、接收等 --> <bean id="<em>jmsTemplate</em>" class="org.springframework.jms.core.<em>JmsTemplate</em> 对象 <em>JmsTemplate</em> <em>jmsTemplate</em> = applicationContext.getBean(<em>JmsTemplate</em>.class); //从spring Destination destination = (Destination) applicationContext.getBean("queueDestination"); //使用JmsTemplate jmsTemplate.send(destination, new MessageCreator() { @Override public
spring.jms.jndi-name 属性,如以下示例所示: spring.jms.jndi-name=java:/MyConnectionFactory 33.1.4发送消息 Spring的 JmsTemplate import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jms.core.JmsTemplate ; import org.springframework.stereotype.Component; @Component public class MyBean { private final JmsTemplate jmsTemplate; @Autowired public MyBean(JmsTemplate jmsTemplate) { this.jmsTemplate = jmsTemplate; } / 如果定义了 DestinationResolver 或 MessageConverter bean,则会自动 将其与自动配置的 JmsTemplate 相关联。
-- Spring提供的JMS工具类,它可以进行消息发送、接收等 --> <bean id="<em>jmsTemplate</em>" class="org.springframework.jms.core.<em>JmsTemplate</em> > (3)在cn.itcast.demo包下创建消息生产者类 @Component public class QueueProducer { @Autowired private <em>JmsTemplate</em> <em>jmsTemplate</em>; @Autowired private Destination queueTextDestination; /** * 发送文本消息 * @param text */ public void sendTextMessage(final String text){ <em>jmsTemplate</em>.send(queueTextDestination, new MessageCreator <em>jmsTemplate</em>; @Autowired private Destination topicTextDestination; /** * 发送文本消息 * @param text
@Component public class MyBean { private final JmsTemplate jmsTemplate; @Autowired public MyBean(JmsTemplate jmsTemplate) { this. jmsTemplate = jmsTemplate; } 将 JmsTemplate 注入 MyBean 中,便可在该类的其他方法中使用 JmsTemplate
jmsTemplate; @PostConstruct public void init() { jmsTemplate.convertAndSend("queue1 jmsTemplateQueue(ConnectionFactory connectionFactory) { return new JmsTemplate(connectionFactory connectionFactory) { JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory); jmsTemplate.setPubSubDomain (true); return jmsTemplate; } } Producer @SpringBootApplication public class Producer { @Autowired private JmsTemplate jmsTemplatePublish; @Autowired private JmsTemplate jmsTemplateQueue
-- Spring提供的JMS工具类,它可以进行消息发送、接收等 --> 2 <bean id="<em>jmsTemplate</em>" class="org.springframework.jms.core.<em>JmsTemplate</em> import javax.jms.Message; 7 import javax.jms.Session; 8 9 import org.springframework.jms.core.<em>JmsTemplate</em> <em>jmsTemplate</em>; 19 20 public void sendMessage(Destination destination, final String message) { <em>jmsTemplate</em>) { 36 this.<em>jmsTemplate</em> = <em>jmsTemplate</em>; 37 } 38 39 } 1.2.4 配置消费者 定义处理消息的MessageListener -- Spring提供的JMS工具类,它可以进行消息发送、接收等 --> 15 <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate
targetConnectionFactory); pooledConnectionFactory.setMaxConnections(10); return pooledConnectionFactory; } @Bean //public JmsTemplate jmsTemplate(SingleConnectionFactory connectionFactory){ public JmsTemplate jmsTemplate(SingleConnectionFactory connectionFactory){ JmsTemplate jmsTemplate = new JmsTemplate(); jmsTemplate.setConnectionFactory(connectionFactory ); return jmsTemplate; } } 说明: ? 上图中1:消费者的名称 上图中2的->:使用的是jdk8的特性 完整代码: @Component public class PtpProducer { @Autowired private JmsTemplate
http://localhost:8161/admin/ image.png 默认访问密码是:admin/admin 如果需要修改在:/conf/jetty-realm.properties 中修改 JmsTemplate 在springboot上整合的,使用spring 的JmsTemplate来操作ActiveMQ 一、首先在pom文件中导入所需的jar包坐标: <dependency> <groupId -- 配置JMS模板,Spring提供的JMS工具类 --> <bean id="<em>jmsTemplate</em>" class="org.springframework.jms.core.<em>JmsTemplate</em> <em>jmsTemplate</em>; @Qualifier("JmsSenderDestination") @Autowired protected Destination destination; public -- 配置消息队列监听者 --> <bean id="JmsListener" class="com.mashu.activeMq.<em>jmsTemplate</em>.JmsTemplateListener" />
JmsTemplate: JmsTemplate是Spring提供的一个用于操作JMS的高级工具类。它简化了发送和接收消息的过程,处理了连接、会话等资源管理,使得代码更加简洁。 3. 在Spring中,可以通过配置来创建连接工厂,然后注入到JmsTemplate中使用。 6. MessageConverter: MessageConverter用于在消息和Java对象之间进行转换。 jmsTemplate; @Autowired private Destination myQueue; public void sendMessage(String message ) { jmsTemplate.convertAndSend(myQueue, message); } @JmsListener(destination = "myQueue JmsTemplate用于发送消息,@JmsListener用于接收消息。 注意事项: 确保配置正确的JMS连接工厂、目的地和消息转换器。 在发送和接收消息时,要考虑消息的格式、大小和顺序。
使用JMSTemplate对象。发送消息。 第四步:在spring容器中配置Destination。 <?xml version="1.0" encoding="UTF-8"? -- Spring提供的JMS工具类,它可以进行消息发送、接收等 --> <bean id="<em>jmsTemplate</em>" class="org.springframework.jms.core.<em>JmsTemplate</em> 对象 <em>JmsTemplate</em> <em>jmsTemplate</em> = applicationContext.getBean(<em>JmsTemplate</em>.class); //从spring容器中取Destination 发送消息 第一步:初始化一个spring容器 第二步:从容器中获得<em>JMSTemplate</em>对象。 <em>JmsTemplate</em> <em>jmsTemplate</em> = applicationContext.getBean(<em>JmsTemplate</em>.class); // 第三步:从容器中获得一个Destination