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. python字符串的常见操作

    find: 根据指定字符串获取对应的下标, 如果找不到对应的数据返回-1, 这里的-1表示没有找到数据 my_str = "hello" # find: 根据指定字符串获取对应的下 ...

  2. django setting文件那些事

    1.设置语言.时区 2.设置新建的用户表作为默认用户表 3.利用apps文件夹收纳app 新建python package apps,然后把app放在该文件夹下 然后setting中添加如下代码: 4 ...

  3. Simulink仿真入门到精通(八) M语言对Simulink模型的自动化操作及配置

    8.1 M语言控制模型的仿真 M语言与Simulink结合的方式: 在Simulink模型或模块中使用回调函数 在M语言中调用与模型相关的命令,控制模型的建立,设置模块的属性,增删信号线,以及运行模型 ...

  4. Vue2.0 【第一季】第5节 v-on:绑定事件监听器

    目录 Vue2.0 [第一季] 第5节 v-on:绑定事件监听器 第五节 v-on:绑定事件监听器 一.使用绑定事件监听器,编写一个加分减分的程序. Vue2.0 [第一季] 第5节 v-on:绑定事 ...

  5. 使用 notepad 正则转换 字符串

    一..在一堆字符串中找出某一个特定格式的字符串,例如如下 需要摘出 WMID_abc WMID_def WMID_ghi {"abc",WMID_abc,oid_abc} {&qu ...

  6. 菜鸟对java和Go的理解

    1.go对比java go通过结构体嵌套+接口实现类似面向对象中的继承和多态.个人认为尤其是go的接口抓住了多态的本质.而Go提倡的面向接口的思想也可能使得架构上更加解耦. 2.关于Go不要通过共享内 ...

  7. Collection-接口中的方法(新手)

    /* Collection 接口中的方法 ArrayList implements List 数组列表 实现 列表 List extends Collection 列表 继承 数组列表*///导入包. ...

  8. 给 ABP vNext 应用安装私信模块

    在上一节五分钟完成 ABP vNext 通讯录 App 开发 中,我们用完成了通讯录 App 的基础开发. 这本章节,我们会给通讯录 App 安装私信模块,使不同用户能够通过相互发送消息,并接收新私信 ...

  9. 理解Raft协议

    目录 1.Paxos算法存在的问题 2.Raft算法     2.1 复制状态机     2.2. Raft算法     2.2.1 安全性问题     2.2.2 Leader选举     2.2. ...

  10. Cisco 综合配置(三)

    要求: 1.PC1 PC2使用DHCP,获取IP ,VLAN为10 和20,网关在Core Switch 2上2.DHCP和web server VLAN为100,网关在Core Switch 1上3 ...