基于SpringBoot中activeMq的JmsTemplate的实例
作者:xiaoluo5238 时间:2021-11-04 15:36:34
SpringBoot 中使用activeMq的步骤:
1、pom中引入jar包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<!-- <version>5.7.0</version> -->
</dependency>
2、spring boot配置文件中配置activeMq
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.in-memory=true
spring.activemq.pool.enabled=false
3、Application 中添加对应的bean生成规则
package com.telligen.ascertain;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.jms.core.JmsTemplate;
import javax.jms.ConnectionFactory;
@SpringBootApplication
public class ApproveApplication {
public static void main(String[] args) {
SpringApplication.run(ApproveApplication.class, args);
}
@Bean
public ConnectionFactory connectionFactory(){
System.out.println("aaaaaaaaaaaaaaaaaaaaaa");
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
connectionFactory.setBrokerURL("tcp://localhost:61616");
connectionFactory.setUserName("admin");
connectionFactory.setPassword("admin");
return connectionFactory;
}
@Bean
public JmsTemplate genJmsTemplate(){
System.out.println("aaaaaaaaaaaaaaaaaaaaaabbbbbbbbb");
return new JmsTemplate(connectionFactory());
}
@Bean
public JmsMessagingTemplate jmsMessageTemplate(){
System.out.println("ccccccccccccc");
return new JmsMessagingTemplate(connectionFactory());
}
}
4、发送消息
package com.telligen.ascertain.approve.common.util.network;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component;
@Component
@Scope("singleton")
public class ActiveMqUtil {
private Logger logger = Logger.getLogger(ActiveMqUtil.class);
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
public void sendMsg(String destinationName ,String message){
logger.info("发送 消息到消息队列");
jmsMessagingTemplate.convertAndSend(destinationName,message);
}
}
遇到的问题:
jmsMessagingTemplate 注入不成功,spring初始化错误,异常如下,只要按照步骤三就可以了:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jmsTemplate' defined in class path resource [org/springframework/boot/autoconfigure/jms/JmsAutoConfiguration$JmsTemplateConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.jms.core.JmsTemplate]: Factory method 'jmsTemplate' threw exception; nested exception is java.lang.NoSuchMethodError: org.springframework.jms.core.JmsTemplate.setDeliveryDelay(J)V
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:590)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1256)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1105)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:503)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$112/1129944640.getObject(Unknown Source)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:327)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:139)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:117)
... 29 more
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.jms.core.JmsTemplate]: Factory method 'jmsTemplate' threw exception; nested exception is java.lang.NoSuchMethodError: org.springframework.jms.core.JmsTemplate.setDeliveryDelay(J)V
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:582)
... 47 more
Caused by: java.lang.NoSuchMethodError: org.springframework.jms.core.JmsTemplate.setDeliveryDelay(J)V
at java.lang.invoke.MethodHandleNatives.resolve(Native Method)
at java.lang.invoke.MemberName$Factory.resolve(MemberName.java:965)
at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:990)
at java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:1385)
at java.lang.invoke.MethodHandles$Lookup.linkMethodHandleConstant(MethodHandles.java:1726)
at java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNatives.java:442)
at org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration$JmsTemplateConfiguration.mapTemplateProperties(JmsAutoConfiguration.java:91)
at org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration$JmsTemplateConfiguration.jmsTemplate(JmsAutoConfiguration.java:83)
at org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration$JmsTemplateConfiguration$$EnhancerBySpringCGLIB$$654aefcc.CGLIB$jmsTemplate$0(<generated>)
at org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration$JmsTemplateConfiguration$$EnhancerBySpringCGLIB$$654aefcc$$FastClassBySpringCGLIB$$6b82ee57.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:361)
at org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration$JmsTemplateConfiguration$$EnhancerBySpringCGLIB$$654aefcc.jmsTemplate(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
... 48 more
Springboot整合activemq时报jmsMessagingTemplate未加载错误
错误现象
Bean method ‘jmsMessagingTemplate' in ‘JmsAutoConfiguration.MessagingTemplateConfiguration' not loaded because Ancestor org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration did not match
网上解决方案
网上最多的方案是:application.properties中配置项的行尾有空格。检查没有,排除了这种可能。
第二种解决方案是:按如下方式将配置spring.activemq.pool.enabled改为false
spring.activemq.pool.enabled=false
启动springboot是不报错了,但是要发的消息也没进队列。至于为什么就不报错了,还没搞明白。如有高人请指点一二。
解决方案
查看ActiveMQConnectionFactoryConfiguration类,自动配置发现需要引入下面这个依赖:
<dependency>
<groupId>org.messaginghub</groupId>
<artifactId>pooled-jms</artifactId>
<version>1.0.3</version>
</dependency>
将依赖引入pom,再启动springboot,搞定!
来源:https://blog.csdn.net/xiaoluo5238/article/details/81202642
标签:SpringBoot,activeMq,JmsTemplate
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
C#子线程更新UI控件的方法实例总结
2022-08-31 15:40:23
![](https://img.aspxhome.com/file/2023/9/81089_0s.jpg)
C# web.config之<customErrors>节点说明案例详解
2023-07-06 20:20:15
java 按行读取文件并输出到控制台的方法
2022-10-28 22:48:20
DataGridView不显示最下面的新行、判断新增行、删除行操作
2022-11-26 16:14:36
Java Integer及int装箱拆箱对比
2023-04-22 04:21:11
SpringBoot使用Jackson配置全局时间日期格式
2021-10-04 12:45:06
![](https://img.aspxhome.com/file/2023/0/83090_0s.png)
Java之Jackson的基本使用案例讲解
2022-05-27 22:08:49
![](https://img.aspxhome.com/file/2023/5/105965_0s.png)
一篇文章带你搞懂Java线程池实现原理
2021-10-23 05:45:36
![](https://img.aspxhome.com/file/2023/5/77075_0s.jpg)
Unity实现粒子光效导出成png序列帧
2023-08-30 21:22:52
输出的文本实现对齐的方法(超简单)
2023-06-19 03:57:09
![](https://img.aspxhome.com/file/2023/1/66581_0s.jpg)
SpringBoot集成MybatisPlus报错的解决方案
2022-06-28 05:03:20
![](https://img.aspxhome.com/file/2023/0/68140_0s.jpg)
详解C#中的属性和属性的使用
2023-12-03 09:51:39
C++编写实现图书管理系统
2022-03-05 09:51:00
![](https://img.aspxhome.com/file/2023/6/127526_0s.jpg)
BufferedInputStream(缓冲输入流)详解_动力节点Java学院整理
2022-01-08 07:02:41
Android自定义dialog简单实现方法
2021-07-29 17:10:00
java~springboot~ibatis数组in查询的实现方法
2023-03-31 21:31:13
Spring中XML schema扩展机制的深入讲解
2022-06-29 07:44:15
![](https://img.aspxhome.com/file/2023/4/77384_0s.png)
C# 获取属性名的方法
2023-03-05 07:02:18
C#解析Lrc歌词文件过程详解
2021-12-26 05:52:38
![](https://img.aspxhome.com/file/2023/0/113890_0s.jpg)
java递归设置层级菜单的实现
2023-03-05 14:14:57