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. C语言程序设计(八) 数组

    第八章 数组 //L8-1 #include <stdio.h> int main() { int score1, score2, score3, score4, score5; int ...

  2. HTML5 history-hash 随机选择彩票

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  3. .NET 5 Preview 1中的ASP.NET Core更新 (2020年3月16日)

    .NET 5 Preview1现在可用,可以进行评估了! .NET 5将是当前版本. 开始 要在.NET 5.0中开始使用 ASP.NET Core,请安装.NET 5.0 SDK. 如果您使用的是W ...

  4. C++ 【静态成员】static修饰的成员

    首先,我们先通过字面意思来理解... 成员:成员变量.成员函数. static  修饰成员变量,还有修饰成员函数. static  声明为静态的,称为静态成员.不管这个类创建了多少个对象,静态成员只有 ...

  5. ASP.NET MVC5实现芒果分销后台管理系统(二):Code First快速集成EntityFramework

    在上一篇文章中,我们已经搭建了整个芒果后台管理系统整个工程架构,并集成了AutoMapper,日志组件等,接下来我们将使用Entity Framework完善系统的持久化存储部分.这篇EF的构造,我将 ...

  6. Natas15 Writeup(sql盲注之布尔盲注)

    Natas15: 源码如下 /* CREATE TABLE `users` ( `username` varchar(64) DEFAULT NULL, `password` varchar(64) ...

  7. CVE-2019-3396:Confluence未授权模板注入_代码执行

    title: Confluence未授权模板注入/代码执行(CVE-2019-3396) tags: [poc,cve] 简介 Confluence是一个专业的企业知识管理与协同软件,也可以用于构建企 ...

  8. 贵州省网络安全知识竞赛团体赛Writeup-phpweb部分

    0x01 混淆后门#conn.php 首先还是拖到D盾扫描 打开conn.php发现底部有那么一串代码: 对这个代码进行分析 首先可以对几个比较简单的变量输出看一下 $s输出内容为create_fun ...

  9. python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法

    今天使用pip安装第三库时,有时会报错: pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='file ...

  10. P1361 小M的作物 【网络流】【最小割】

    题目描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子有1个(就是可以种一棵作物)(用1...n编号). 现在,第i种作物种植在A中种植可 ...