1. 首先需要在 pom.xml 中添加如下两个 jar 包:spring-jms 与 activemq-core,其依赖的 jar 包会自动下载

  2. 接着进行相关配置

@Configuration
public class JMSConfig {
@Bean
public ConnectionFactory connectionFactory() {
ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://localhost:61616");
return cf;
}

/**
* 消息转换器,有如下四种可供选择
* MappingJacksonMessageConverter 转换json
* MappingJackson2MessageConverter 转换json
* MarshallingMessageConverter 转换xml
* SimpleMessageConverter 如果是字符串转换为字节,如果是类进行序列化(需实现 Serializable)
*/
@Bean
public MessageConverter messageConverter() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
/* 使用 MappingJackson2MessageConverter 必须配置,否则无法反序列化
如果存储类型有多种,可以使用 converter.setTypeIdMappings(); 方法
为每种类设置对应的 TypeId
*/
converter.setTypeIdPropertyName("<内容随意,保证一致即可>"); // 如下三行配置的是当类为空时仍进行转换,如果不配置类为空时会报异常
// ObjectMapper mapper = new ObjectMapper();
// mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
// converter.setObjectMapper(mapper);
return converter;
}

// 配置 Spring 提供的 JmsTemplate Bean
@Bean
public JmsTemplate jmsTemplate(ConnectionFactory connectionFactory, MessageConverter messageConverter) {
JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
// 此处可以选择是否配置,如果不配默认是使用 SimpleMessageConverter
jmsTemplate.setMessageConverter(messageConverter);
// 可以设置默认的 Destination (Queue)
// 如果需要 Topic,可以使用 setDefaultDestination 方法,添加默认 Destination
jmsTemplate.setDefaultDestinationName("<XXXX>");
return jmsTemplate;
}

}
  1. 使用示例

public class Service {

// JmsTemplate 实现了 JmsOperations 接口,可以注入
@Autowired
private JmsOperations jmsOperations;

// 方法中注释部分为另一个发送接收方式
@Override
public void sendSpittleAlert(User user) {
jmsOperations.convertAndSend("testqueue", user);
// jmsOperations.send("testqueue", new MessageCreator() {
// @Override
// public Message createMessage(Session session) throws JMSException {
// return session.createObjectMessage(user);
// }
// });
}

@Override
public User receiveSpitterAlert() {
User user = (User) jmsOperations.receiveAndConvert("testqueue");
return user;
// try {
// ObjectMessage receive = (ObjectMessage) jmsOperations.receive("testqueue");
// return (User) receive.getObject();
// } catch (JMSException e) {
// throw JmsUtils.convertJmsAccessException(e);
// }
}

}

如果要异步接收 MQ 的消息,可以进行如下配置:

@Configuration
@EnableJms // 开启 JMS 注解
public class JMSConfig {
@Bean
public ConnectionFactory connectionFactory() {
ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://localhost:61616");
return cf;
}

// 创建消息监听容器
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory());
factory.setDestinationResolver(jmsTemplate().getDestinationResolver());
factory.setConcurrency("3-10");
return factory;
}

@Bean
public JmsTemplate jmsTemplate() {
JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory());
return jmsTemplate;
}
}

之后就可以在其他 Bean 中使用 @JmsListener 注解监听

@Component
public class MyService {
@JmsListener(destination = "myDestination")
public void processOrder(String data) { ... }
}

当 MQ 有消息时,就会调用processOrder方法

Spring 中使用 ActiveMQ 笔记的更多相关文章

  1. 转载:在spring中嵌入activemq

    转载:http://www.dev26.com/blog/article/137 web开发站中的邮件发送使用了activemq我这是从网上找的进行了一些修改,记录下来,为了避免发送邮件时程序对用户操 ...

  2. spring 中bean学习笔记

    spring 中bean 一.bean的定义和应用 1. bean 形象上类似于getXX()和setXX()的一种. 2. 由于java是面向对象的,类的方法和属性在使用中需要实例化. 3. 规律: ...

  3. Spring中AOP学习笔记

    AOP 描述(摘抄百度百科) AOP开发中的相关操作术语 实例(xml方式) 通知的类型 切入点表达式的写法: 实例(注解方式) 描述(摘抄百度百科) AOP(面向切面编程):Aspect Orien ...

  4. Spring 中使用 WebSocket 笔记

    编写 WebSocket 消息处理类,比较简单的方式就是直接继承AbstractWebSocketHandler,并覆写其中的处理方法,下面为一个简单的 demo public class WebSo ...

  5. [原创]java WEB学习笔记109:Spring学习---spring中事物管理

    博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好 ...

  6. Spring Boot学习笔记——Spring Boot与ActiveMQ的集成

    Spring Boot对JMS(Java Message Service,Java消息服务)也提供了自动配置的支持,其主要支持的JMS实现有ActiveMQ.Artemis等.这里以ActiveMQ为 ...

  7. Spring中AOP原理,源码学习笔记

    一.AOP(面向切面编程):通过预编译和运行期动态代理的方式在不改变代码的情况下给程序动态的添加一些功能.利用AOP可以对应用程序的各个部分进行隔离,在Spring中AOP主要用来分离业务逻辑和系统级 ...

  8. Spring学习笔记——Spring中的BeanFactory与FactoryBean

    BeanFactory BeanFactory是Spring的org.springframework.beans.factory下的一个接口,是Spring IOC所遵守的基本编程规范.他的实现类有D ...

  9. 【学习笔记】Spring中的BeanFactory和ApplicationContext 以及 Bean的生命周期(Y2-3-2)

    BeanFactory和ApplicationContext Spring的IoC容器就是一个实现了BeanFactory接口的可实例化类. Spring提供了两种不同的容器: 一种是最基本的Bean ...

随机推荐

  1. js中(event)事件对象

    事件对象 • 什么是事件对象? • 就是当你触发了一个事件以后,对该事件的一些描述信息 • 例如: ° 你触发一个点击事件的时候,你点在哪个位置了,坐标是多少 ° 你触发一个键盘事件的时候,你按的是哪 ...

  2. 使用selenium模拟登陆淘宝、新浪和知乎

    如果直接使用selenium访问淘宝.新浪和知乎这些网址.一般会识别出这是自动化测试工具,会有反制措施.当开启开发者模式后,就可以绕过他们的检测啦.(不行的,哭笑) 如果网站只是对windows.na ...

  3. 初学react

    React特点: 声明式设计:建议使用JSX来描述用户界面;构建组件:单向响应的数据流: JSX:JSX是一种JAVASCRIPT的语法扩展,元素是构成react的最小单位,JSX就是用来声明REAC ...

  4. str的常用方法

    注:s表示定义的一个字符串变量,如:s = 'hello string' 1.  s.index()  查找元素,若查到则返回该元素索引,含多个该元素则返回第一个,查不到则报错 s = 'hello ...

  5. go源码分析(五) 获取函数名和调用者的函数名

    参考资料 实现代码保存在我的github // input flag 1:FunName 2:CallerFunName func GetFuncName(flag int) string {     ...

  6. javaScript 基础知识汇总 (十五)

    1.模块简介 什么是模块: 模块就是一个文件,一个脚本,通过关键字export 和 import 交换模块之间的功能. export 关键字表示在当前模块之外可以访问的变量和功能. import 关键 ...

  7. vscode 自动修复 setting.json 修改完,得重启浏览器 # 新版(>1.41.0)配置 vscode #解决了

    vscode 自动修复 setting.json 修改完,得重启浏览器,不用 npm run dev 就能看到效果 "editor.codeActionsOnSave": { &q ...

  8. Python接口测试(第一个接口返回的数据作为第二个参数的入参)

    python代码如下 import requests url1="http://localhost:8080/pinter/com/getSku?id=1" respon=requ ...

  9. Java第一节课动手动脑

    在第一节课的动手动脑中,主要解决四则运算问题. 首先第一个是出30道四则运算题目,在100以内.这个问题需要控制随机数生成的范围和结果的范围在100以内就可以. 第一次改进是3点:一为避免重复,二为定 ...

  10. python-参考书

    真的是找了很多的参考书,但是看懂,上手用的就一本比较好的<编程小白的第1本python入门书>非常的好. 属于那种一看就懂,能说明白的.别的,要么就是翻译的外文的,有点难以理解,要么就是中 ...