标签:Spring,Boot,ActiveMQ
RabbitMQ是比较常用的AMQP实现,这篇文章是一个简单的Spring boot整合RabbitMQ的教程。
安装ActiveMQ服务器,(也可以不安装,如果不安装,会使用内存mq)
构建Spring boot项目,增加依赖项,只需要添加这一项即可
<!-- 添加acitivemq依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
增加Application类
@SpringBootApplication
@EnableScheduling //使用定时任务发送消息
public class MqTestApplication {
public static void main(String[] args) {
SpringApplication.run(MqTestApplication.class, args);
}
}
配置application.yml
spring:
activemq:
broker-url: tcp://127.0.01:61616
packages:
trust-all: true
构建一个数据Model,可以发送和消费的数据类型有: String, byte array, Map<String,?>, Serializable object.
// 如果发送的消息是一个对象,必须implements Serializable接口
public class TModel implements Serializable {
private static final long serialVersionUID = -921008687184331557L;
private int count;
public TModel(int count) {
this.count = count;
}
@Override
public String toString() {
return "TModel [count=" + count + "]";
}
}
构建Producer
@Component
public class Producer {
// 在Producer中注入JmsTemplate,我们可以通过这个template发送消息
private final JmsTemplate jmsTemplate;
private int count = 0;
@Autowired
public Producer(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
// 这里使用Spring Boot的定时任务发送消息
@Scheduled(fixedRate = 1000)
public void create() {
// 使用convertAndSend发送消息
jmsTemplate.convertAndSend("queue1", new TModel(count++));
}
}
构建Consumer
@Component
public class Consumer {
@JmsListener(destination = "queue1")
public void comsume(TModel content) {
System.out.println("recive message from queue1 [" + content + "]");
}
}
特别备注:如果我们的生产者和消费者在不同的Module中时,最好将要消费的数据抽象成公共Module.程序是通过Serializable来序列化和反序列化对象的。必须保证生产者和消费者的对象模型的serialVersionUID是一致的。
项目地址: https://github.com/ldwqh0/active-mq-spring.git
示例:配置rabbitmq ,增加一个队列
@Configuration
public class Aqueue {
@Bean
public Queue queue() {
return new Queue("good");
}
}
定义一个生产者.
当启用activemq之后,会自动创建一个AmqpTemplate ,可以被注入到任何需要的地方,我们可以通过这个AmqpTemplate发送消息到MQ中
/**
* 定义一个生产者
* @author LiDong
*/
@RestController
@RequestMapping("/test")
public class SendController {
@Autowired
private AmqpTemplate template;
@GetMapping
public String testSend() {
// 使用AmqpTemplate发送消息
template.convertAndSend("good", "good");
return "success";
}
}
定义消费者,通过指定RabbitListener(queues='good')指定消费的队列
@Component
public class Consumer {
/**
* 定义一个消费者
* @param message
*/
@RabbitListener(queues = "good")
public void handler(String message) {
System.out.println("recive message from " + message);
}
}
启动测试,在浏览器中输入 http://localhost:8080/test 即可发送一条消息到队列中。 该对列可以被消费者处理
来源:https://www.jianshu.com/p/b95dcc43a8a6
0
投稿
猜你喜欢
- Java 异步实现的几种方式1. jdk1.8之前的Futurejdk并发包里的Future代表了未来的某个结果,当我们向线程池中提交任务的
- 项目描述:这是一个基于SpringBoot+Vue框架开发的仿小米电子产品售卖商城系统。首先,这是一个前后端分离的项目,代码简洁规范,注释说
- 定义: SharedPreferences
- 前言本文主要给大家介绍了关于Spring Boot应用极速部署脚本的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧
- 一、分布式锁使用场景:代码部署在多台服务器上,即分布式部署。多个进程同步访问一个共享资源。二、需要的技术:数据库:mongojava:mon
- 面试题1:说说你对消息队列的理解,消息队列为了解决什么问题?我们公司业务系统一开始体量较小,很多组件都是单机版就足够,后来随着用户量逐渐扩大
- 最近要给一个 Winform 项目添加功能,需要一个能显示进度条的弹窗,还要求能够中止任务,所以就做了一个,在此做个记录总结。虽然用的是比较
- Java IO中File的使用是比较频繁的,在文件的上传和删除中都会用到的。比如我们在写管理系统的时候有可能会用到图片的上传,和删除。那么我
- * 验证码地址:https://007.qq.com/online.html* 使用OpenCv模板匹配* 成功率90%左右* Java +
- 异常日志[com.alibaba.dubbo.rpc.filter.TimeoutFilter] - [DUBBO] invok
- 短8位UUID思想其实借鉴微博短域名的生成方式,但是其重复概率过高,而且每次生成4个,需要随即选取一个。本算法利用62个可打印字符,通过随机
- 目录前言错误实例演示实现ApplicationContextAware接口lookup methodlookup method签名总结前言看
- 生命太短暂,不要去做一些根本没有人想要的东西。本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术
- 添加jar包这里的Scala不是maven工程所以要找到项目结构(快捷键:同时按住Ctrl+shift+Alt+s)在模块里面添加添加MyS
- 在上周发布的 TienChin 项目视频中,我和大家一共梳理了六种幂等性解决方案,接口幂等性处理算是一个非常常见的需求了,我们在很多项目中其
- 一、医院接口本文继续开发分布式医疗挂号系统,进入到医院信息、科室、排版接口的开发,内容比较枯燥。关于医院医院信息的上传接口实现,已经在上一篇
- spring Cache注解和redis区别1.不支持TTL即不能设置过期时间 expires time,SpringCache 认为这是各
- 多数据源的目的在于一个代码模块可调用多个数据库的数据进行某些业务操作。MyBatis-Plus开发者写了一个多数据源叫dynamic-dat
- 通常C#使用基于XML的配置文件,不过如果有需要的话,比如要兼顾较老的系统,可能还是要用到INI文件。但C#本身并不具备读写INI文件的AP
- 这篇文章主要介绍了spring cloud Ribbon用法及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学