SpringBoot 整合 gradle 集成ActiveMQ
时间:2022-07-22
本文章向大家介绍SpringBoot 整合 gradle 集成ActiveMQ,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
开发环境:
1.springBoot 2.3.1.RELEASE
2.gradle 5.6
3.activeMQ 2.3.1.RELEASE
第一步:首先在build.gradle中导入activeMQ的依赖
buildscript {
dependencies {
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-activemq', version: '2.3.1.RELEASE'
}
}
坐标可以在maven仓库中寻找地址:
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-activemq/2.3.1.RELEASE
第二步:在springBoot配置文件中配置activeMQ
activemq:
broker-url: tcp://localhost:61616
user: admin
password: admin
pool:
enabled: false
max-connections: 50
#默认包名安全(支持序列化与反序列化)
packages:
trust-all: true
#支持topic订阅模式
jms:
pub-sub-domain: true
第三部:初始化消息队列
package com.es;
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.jms.Queue;
@Configuration
public class ActiveMqConfig {
/**
* @Author GONGWENXUE
* @Description //TODO 消息队列初始化配置 - 创建消息队列
* @version: v1.8.0
* @Date 13:55 2020/7/31
* @Param
* @return
**/
@Bean
public Queue queue() {
return new ActiveMQQueue("test.queue");
}
}
第四部:创建消息发布者
package com.es.basedata.mq;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.Topic;
/**
* @Author GONGWENXUE
* @Description //TODO 定义生产者
* @version: v1.8.0
* @Date 17:04 2020/7/31
* @Param
* @return
**/
@Service
public class MqProducer {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
/**
* @Author GONGWENXUE
* @Description //TODO 发布者发送自定义消息
* @version: v1.8.0
* @Date 16:58 2020/7/31
* @Param queueName 队列名称
* @Param message 消息内容
* @return
**/
public void sendMessage(String queueName, String message) {
//发送队列消息
this.jmsMessagingTemplate.convertAndSend(queueName, message);
}
}
第五步:创建消费者
package com.es.basedata.mq;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
/**
* 定义消费者
* @Description
* @author Qz
* @date 2018年3月27日
*
*/
@Component
public class MqConsumer {
@JmsListener(destination = "test.queue")
public void receiveQueue(String text) {
System.out.println("消费者:来源于生产者对列的消息:"+text);
}
}
第六步:开发接口测试
package com.es.basedata.api;
import com.es.basedata.mq.MqProducer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/**
* @className: TestMq
* @Description: TODO 测试MQ
* @version: v1.8.0
* @author: GONGWENXUE
* @date: 2020/7/31 17:05
*/
@RestController
public class TestMq {
@Autowired
private MqProducer mqProducer;
@GetMapping("/test-mq/{message}")
public String test(@PathVariable("message") String message){
mqProducer.sendMessage("test.queue", message);
System.out.println("浏览器上测试mq成功");
return "浏览器上测试mq成功";
}
}
在浏览器上输入 http://localhost:8085/test-mq/浏览器上测试MQ
得到结果:
后台打印:
到此即大功告成!!!
重点:可能遇到的坑
1.找不到JmsMessagingTemplate,无法匹配MessagingTemplateConfiguration
报错如下:
Field jmsMessagingTemplate in com.es.basedata.mq.MqProducer required a bean of type 'org.springframework.jms.core.JmsMessagingTemplate' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
The following candidates were found but could not be injected:
- Bean method 'jmsMessagingTemplate' in 'JmsAutoConfiguration.MessagingTemplateConfiguration' not loaded because Ancestor org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration did not match
- TensorFlow中的feed与fetch
- TensorFlow中常量与变量的基本操作演示
- 如何写出好的 JavaScript —— 浅谈 API 设计
- 分析DAO的漏洞
- Phoenix - Hbase与SQL
- 2018年,让你的数据库变更快的十个建议
- Hadoop如何使用Zookeeper来保障高可用?
- HTTP 压力测试工具 wrk
- 理解 Linux shell 中的一个方言:2>&1
- 大家知道什么是git中的 .gitignore吗?
- MySQL 8.0 新特性 :隐藏索引 Invisible Indexes
- 如何监控MySQL的复制延迟?
- Uber 的 Docker Mysql 应用
- Dubbo源码-从HelloWorld开始
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Linux实现自动登录的实例讲解
- Linux中date命令转换日期提示date: illegal time format问题解决
- leetcode队列之最近的请求次数
- 安防视频云服务EasyCVR集成海康SDK时语音对出现杂音问题,如何解决?
- arm linux利用alsa驱动并使用usb音频设备
- linux 磁盘转移空间的方法
- 详解git中配置的.gitignore不生效的解决办法
- Apache Thrift环境配置
- CentOS 7更新时出现:Multilib version problems问题的解决方法
- Linux模拟网络丢包与延迟的方法
- centos6.5通过yum安装nginx
- Linux系统利用cp命令实现强制覆盖功能的方法
- leetcode队列之设计循环双端队列
- Centos7学习之添加用户和用户组的方法
- Linux静态库与动态库实例详解