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. [pdo_mysql.lo] Error 1 或者 [php_mysql.lo] Error 1

    make: *** [pdo_mysql.lo] Error 1 make: *** [php_mysql.lo] Error 1 这是因为这是因为在编译时需要 MySQL 的头的文件.而它按默认搜索 ...

  2. AJAX轮询的实时监控画面

    上一篇我们通过异步刷新Ajax 技术,来实现监控页面监控位号值的刷新,采用Ajax (Asynchronous Javascript And XML)技术,是指一种创建交互式.快速动态网页应用的网页开 ...

  3. 回想笔记 瞎比比 域名注册 解析绑定ip 下载证书 设置证书 重定向http到https请求

    2019.7.27 回想笔记 拥有腾讯云服务器一台 阿里云注册5元域名,进行备案 完成之后 使用解析 绑定服务器ip地址 ,使用域名可以访问到web服务器而不是通过直接暴露ip地址进行访问 证书购买 ...

  4. 一文掌握Redis的三种集群方案

    在开发测试环境中,我们一般搭建Redis的单实例来应对开发测试需求,但是在生产环境,如果对可用性.可靠性要求较高,则需要引入Redis的集群方案.虽然现在各大云平台有提供缓存服务可以直接使用,但了解一 ...

  5. require.context('.', true, /\.router\.js/) webpack 编译的时候读取目录文件

    const routerList = [] function importAll (r) { r.keys().map(value => { r(value).default.map(item ...

  6. 数据库事务ACID详解(转载)

    转载自:http://blog.csdn.net/shuaihj/article/details/14163713 谈谈数据库的ACID 一.事务 定义:所谓事务,它是一个操作序列,这些操作要么都执行 ...

  7. 3D游戏中各种空间变换到底是怎么回事

    每一个游戏可以呈现炫丽效果的背后,需要进行一系列的复杂计算,同时也伴随着各种各样的顶点空间变换.渲染游戏的过程可以理解成是把一个个顶点经过层层处理最终转化到屏幕上的过程,本文就旨在说明,顶点是经过了哪 ...

  8. webService-axis开发jar包

    开发最小jar包集: activation-1.1.jar axiom-api-1.2.13.jar axiom-dom-1.2.13.jar axiom-impl-1.2.13.jar axis2- ...

  9. Nacos作为微服务注册中心,爱不释手的感觉

    我觉得Nacos用起来还不错 在使用SpringCloud做分布式微服务架构时,注册中心是必不可少的一个组件.目前可以用的主要有:Eureka.Consul.Zookeeper.今天,我们就来说一下A ...

  10. iOS/macOS推荐个高效苹果开发工具, JSON 转模型代码工具,不再为复杂JSON数据写模型而烦恼,支持Swift/Objective-C,极速转换

    CCJSON 是一款运行在macOS上 JSON 转模型代码工具,不再为复杂JSON数据写模型而烦恼,可识别嵌套模型,字典/数组,支持Swift/Objective-C,操作方便,极速转换.下载 效果 ...