springboot 集成 activemq

文章目录

  • 一:说明
  • 二:e-car项目配置
    • 1 引入activemq依赖
    • 2 application启动类配置消息监听
    • 3 application.yml配置
    • 4 MQConfig.java 配置类
    • 5 ecar 项目中的监听
    • 6 junit 发送消息
  • 三:tcm-chatgpt项目配置
    • 5 MQListener.java 监听消息
  • 三 测试
    • 启动activemq服务
    • 队列![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/76d5be042cbb43069dd723da2ebd60c3.png)
    • 发布订阅模式
  • 四:发送对象消息
    • 配置队列名称
    • 开启监听
    • 测试类
      • 接收ObjectMessage的消息
      • Map接收的消息

一:说明

1-在两个不同的应用发送和接收消息
2-消息发送应用是 e-car 项目,接收端是 tcm-chatgpt项目,当然,同一个项目也是可以发送和接收的

二:e-car项目配置

1 引入activemq依赖

<!-- 集成 ActiveMQ -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

2 application启动类配置消息监听

加上 @EnableJms 注解, 开启JMS

@EnableJms // 开启JMS
@SpringBootApplication(scanBasePackages="com.nrbc.ecar")
@MapperScan("com.nrbc.ecar.dao.mapper")
public class EcarAppClientApplication {public static void main(String[] args) {SpringApplication.run(EcarAppClientApplication.class, args);}
}

3 application.yml配置

  • 1 注意: 开启主题策略,默认是关闭 开启主题模式,要设置为true
    如果要使用队列模式,pub-sub-domain 要设置为false jms:
    pub-sub-domain: false
  • 同时使用jms的Queue(队列)和Topic(发布订阅),可查看这边文章: 文章链接
spring:# activemq相关配置activemq:broker-url: tcp://localhost:61616user: lipingpassword: lipingpackages:# 配置信任所有的包,这个配置为了支持发送对象消息(如果传递的是对象则需要设置为true,默认是传字符串)trust-all: true# 开启主题策略,默认是关闭 开启主题模式jms:pub-sub-domain: true# 配置activemq队列的名称和主题名称
amq:qname:queueName-1:queueName-1topicName:name-1:topic-prot-1name-2:topic-prot-2

4 MQConfig.java 配置类

/*** 专门配置mq通道的配置类*/
@Slf4j
@Configuration
public class MQConfig {@Value("${amq.topicName.name-1}")private String tpName;@Bean(name = "queueName")Queue queueName() {return new ActiveMQQueue("test_queue");}/*** 主题(发布\订阅模式)通道* @author kazaf* @date 2024/4/24 16:43*/@Bean(name = "topic1")Topic queueFind() {log.info("${amq.topicName.name-1}=" + tpName);return new ActiveMQTopic("topic-model");}@Bean(name = "topic2")Topic topic2() {return new ActiveMQTopic("topic-model2");}@Bean(name = "topic3")Topic topic3() {return new ActiveMQTopic(tpName);}}

5 ecar 项目中的监听

/*** 专门配置mq通道的配置类*/
@Slf4j
@Component
public class MQListener {/*@JmsListener(destination = "test_queue")public void jiant (String message) {System.out.println("监听到消息》:" + message);log.info("监听到消息---》:" + message);}*/@JmsListener(destination = "topic-model")public void reciveTopic(String message) {log.info("11接收主题消息》:"+message);}@JmsListener(destination = "topic-model2")public void topicReceive2(String message) {log.info("topic-2监听到消息---》:" + message);}/*** 主题名称从配置文件中动态获取 */@JmsListener(destination = "${amq.topicName.name-1}")public void topicReceive3(String message) {log.info("topic-3监听到消息---》:" + message);}}

6 junit 发送消息

  • 调用类需要注入消息模板,队列名称或者主题名称
    也可以编写接口发送,demo随个人习惯
@Slf4j
@SpringBootTest(classes = EcarAppClientApplication.class)
@RunWith(SpringRunner.class)
public class ActivemqTest {@Autowiredprivate JmsMessagingTemplate jmsMessagingTemplate;@Autowiredprivate Queue queueName;@Autowiredprivate Topic topic1;@Autowiredprivate Topic topic2;@Autowiredprivate Topic topic3;@Testpublic void queueSender()  {String message="我是队列发出的信息";jmsMessagingTemplate.convertAndSend(queueName, message);log.info("queueSender发送--》:"+message);
//        TimeUnit.SECONDS.sleep(60);}/*** 发送 主题消息(广播)* @author kazaf* @date 2024/4/24 17:09*/@Testpublic void topicSender()  {String message="我是topic-1a";jmsMessagingTemplate.convertAndSend(topic1, message);log.info("topicSender发送--》:"+message);String message2="我是topic2";jmsMessagingTemplate.convertAndSend(topic2, message2);log.info("topic2Sender发送--》:"+message2);String message3="我是topic3发送的";jmsMessagingTemplate.convertAndSend(topic3, message3);log.info("topic3Sender发送--》:"+message3);}
}

三:tcm-chatgpt项目配置

  • 1、2、3、5 跟e-car项目一样的配置

5 MQListener.java 监听消息

MQListener类
代码

/*** @Description: mq监听类* @Author: kazaf* @Date: 2024-04-24 9:34*/
@Slf4j
@Component
public class MQListener {@JmsListener(destination = "test_queue")public void onMessage(String message) {System.out.print(message);//获取到消息后可以干一些事情log.info("恰恰监听到的消息》:"+message);}@JmsListener(destination = "topic-model")public void reciveTopic(String message) {log.info("11接收主题消息》:"+message);}@JmsListener(destination = "topic-model2")public void reciveTopic2(String message) {log.info("22接收主题消息》:"+message);}
}

三 测试

启动activemq服务

  • window端直接启动 bin\win64\activemq.bat 批处理文件

  • 访问 http://localhost:8161 输入 admin / admin 的默认用户名密码登录(根据自己是否修改过)

  • 启动tcm-chatgpt服务

  • 启动e-car服务

  • 运行 ActivemqTest.java 测试类中的 queue发送消息或者Topic发送消息

    队列在这里插入图片描述

发布订阅模式

在这里插入图片描述

四:发送对象消息

配置队列名称

/*** 专门配置mq通道的配置类*/
@Slf4j
@Configuration
public class MQConfig {/**** @author kazaf* @date 2024/4/25 10:51*/@Bean(name = "textMessageQueue")Queue textMessageQueue() {return new ActiveMQQueue("textMessage-queue");}@Bean(name = "objMessageQueue")Queue objMessageQueue() {return new ActiveMQQueue("objMessage-queue");}
}

开启监听

@Slf4j
@Component
public class MQListener {/*** 主题名称从配置文件中动态获取*/@JmsListener(destination = "textMessage-queue")public void queueTextMessageReceive(String message) throws JMSException {log.info("queueTextMessageReceive监听到消息---》:" + message);}@JmsListener(destination = "objMessage-queue")public void queueMapMessageReceive(Map<String,Object> map)  {log.info("queueObjMessageReceive-Map-监听到消息---》:"+ map.get("name")+"--money="+map.get("money"));}/*** 主题名称从配置文件中动态获取*/@JmsListener(destination = "objMessage-queue")public void queueObjMessageReceive(Message message) throws JMSException {if (message instanceof TextMessage) {log.info("queueObjMessageReceive-Text-监听到消息---》:" + ((TextMessage) message).getText());} else if (message instanceof MapMessage) {MapMessage mapMessage = (MapMessage) message;log.info("queueObjMessageReceive-Map-监听到消息---》:"+ mapMessage.getString("name")+"--money="+mapMessage.getString("money"));} else if (message instanceof ObjectMessage) {ObjectMessage objectMessage = (ObjectMessage) message;User user = (User) objectMessage.getObject();log.info("queueObjMessageReceive-obj-监听到消息---》:" + user);}log.info("queueObjMessageReceive-监听到消息--");}

测试类

@Slf4j
@SpringBootTest(classes = EcarAppClientApplication.class)
@RunWith(SpringRunner.class)
public class ActivemqTest {@Autowiredprivate JmsMessagingTemplate jmsMessagingTemplate;@Autowiredprivate JmsTemplate jmsTemplate;@Autowiredprivate Queue textMessageQueue;@Autowiredprivate Queue objMessageQueue;@Testpublic void senderTextMessage() {jmsTemplate.send(textMessageQueue, new MessageCreator() {@Overridepublic Message createMessage(Session session) throws JMSException {TextMessage message = session.createTextMessage();message.setText("发送TextMessage消息");return message;}});}@Testpublic void senderObjMessage() {/*User user = new User();user.setUsername("李哥哥");user.setPassword("mima123");jmsMessagingTemplate.convertAndSend(objMessageQueue, user);*/Map<String, Object> map = new HashMap<>();map.put("name", "掐果果");map.put("money", 1231111111.55);jmsMessagingTemplate.convertAndSend(objMessageQueue, map);}
}

接收ObjectMessage的消息

在这里插入图片描述

Map接收的消息

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/315775.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上位机图像处理和嵌入式模块部署(树莓派4b设置ftp下载)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 作为一个开发板&#xff0c;最好支持ftp下载&#xff0c;这样文件的上传和下载都会比较方便。虽然目前为止&#xff0c;利用mobaxterm和ssh也能实现…

Java小白福音丨保姆级的JDK+Eclipse+其他常用软件安装教程!

是的我看见到处是阳光 JDK正在安装 新世界来得像梦一样 让我暖洋洋 你的Java学习还在继续吗 你的JDK安装了吗 这儿有一份开发软件安装新教程 你不想学学吗 明天一早&#xff0c; 我猜阳光会好 我要把自己打扫 把破旧的套路丢掉 哦这样多好 加油吧Java少年 前言 想学习Java&…

使用大卫的k8s监控面板(k8s+prometheus+grafana)

问题 书接上回&#xff0c;对EKS&#xff08;AWS云k8s&#xff09;启用AMP&#xff08;AWS云Prometheus&#xff09;监控AMG(AWS云 grafana)&#xff0c;上次我们只是配通了EKSAMPAMG的监控路径。这次使用一位大卫老师的grafana的面板&#xff0c;具体地址如下&#xff1a; ht…

HarmonyOS hsp制作与引用

1. HarmonyOS hsp制作与引用 1.1 介绍 HSP动态共享包&#xff08;模块&#xff09;,应用内HSP指的是专门为某一应用开发的HSP&#xff0c;只能被该应用内部其他HAP/HSP使用&#xff0c;用于应用内部代码、资源的共享。应用内HSP跟随其宿主应用的APP包一起发布&#xff0c;与该…

day83 AJAX

一&#xff1a;什么是AJAX AJAX语法 AJAX Asynchronous JavaScript and XML 异步js和XML 实现页面某一部份更新&#xff0c;无需服务器转发或重定向 1 $.ajax() 语法: $.ajax( { "url" : "url", …

4.Docker本地镜像发布至阿里云仓库、私有仓库、DockerHub

文章目录 0、镜像的生成方法1、本地镜像发布到阿里云仓库2、本地镜像发布到私有仓库3、本地镜像发布到Docker Hub仓库 Docker仓库是集中存放镜像的地方&#xff0c;分为公共仓库和私有仓库。 注册服务器是存放仓库的具体服务器&#xff0c;一个注册服务器上可以有多个仓库&…

kubeadmin搭建自建k8s集群

一、安装要求 在开始之前&#xff0c;部署Kubernetes集群的虚拟机需要满足以下几个条件&#xff1a; 操作系统 CentOS7.x-86_x64硬件配置&#xff1a;2GB或更多RAM&#xff0c;2个CPU或更多CPU&#xff0c;硬盘30GB或更多【注意master需要两核】可以访问外网&#xff0c;需要…

Qt窗口

QMainWindow Qt 窗⼝ 是通过 QMainWindow类 来实现的。 QMainWindow 是⼀个为⽤⼾提供主窗⼝程序的类&#xff0c;继承⾃ QWidget 类&#xff0c;并且提供了⼀个预定义的 布局。QMainWindow 包含 ⼀个菜单栏&#xff08;menu bar&#xff09;、多个⼯具栏(tool bars)、多个浮动…

Python并发编程:揭开多线程与异步编程的神秘面纱

第一章&#xff1a;并发编程导论 1.1 并发与并行概念解析 1.1.1 并发性与并行性的区别 想象一下繁忙的厨房中多位厨师同时准备不同的菜肴——即使他们共享有限的空间和资源&#xff0c;也能协同工作&#xff0c;这就是并发性的一个生动比喻。并发性意味着多个任务在同一时间…

【哈希】Leetcode 面试题 01.02. 判定是否互为字符重排

题目讲解 面试题 01.02. 判定是否互为字符重排 算法讲解 直观的想法&#xff1a;我们找到一个字符串的全排列&#xff0c;然后对比当前的排列是否等于另一个字符串。如果两个字符串如果互为排列&#xff0c;所以我们知道两个字符串对应的字符出现的个数相同&#xff0c;那么…

常用图像加密技术-流密码异或加密

异或加密是最常用的一种加密方式&#xff0c;广泛的适用于图像处理领域。这种加密方式依据加密密钥生成伪随机序列与图像的像素值进行异或操作&#xff0c;使得原像素值发生变化&#xff0c;进而使得图像内容发生变化&#xff0c;达到保护图像内容的目的。 该加密方法是以图像…

Aiseesoft Blu-ray Player for Mac:蓝光播放器

Aiseesoft Blu-ray Player for Mac是一款功能强大且易于使用的蓝光播放器&#xff0c;专为Mac用户打造。它以其卓越的性能和简洁的操作界面&#xff0c;为用户带来了全新的高清蓝光播放体验。 Aiseesoft Blu-ray Player for Mac v6.6.50激活版下载 这款软件支持播放任何高质量的…

【Leetcode每日一题】 动态规划 - 简单多状态 dp 问题 - 打家劫舍 II(难度⭐⭐)(67)

1. 题目解析 题目链接&#xff1a;213. 打家劫舍 II 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 这个问题是经典的“打家劫舍”问题的变种&#xff0c;原问题是在单排房屋中进行偷窃&#xff0c;而这个问题则是在…

机器学习:基于Sklearn、XGBoost框架,使用XGBClassifier、支持向量分类器和决策树分类器预测乳腺癌是良性还是恶性

前言 系列专栏&#xff1a;机器学习&#xff1a;高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目&#xff0c;每个项目都处理一组不同的问题&#xff0c;包括监督和无监督学习、分类、回归和聚类&#xff0c;而且涉及创建深度学…

数据挖掘实验一

一、实验环境及背景 使用软件&#xff1a; Anaconda3 Jupyter Notebook 实验内容&#xff1a; 1.使用Tushare或者其他手段获取任意两支股票近三个月的交易数据。做出收盘价的变动图像。2.使用Pandas_datareader获取世界银行数据库中美国&#xff08;USA&#xff09;、瑞典&…

Linux-管道通信

1. 管道概念 管道&#xff0c;是进程间通信的一种方式&#xff0c;在Linux命令中“ | ”就是一种管道&#xff0c;它可以&#xff0c;连接前一条命令&#xff0c;和后一条命令&#xff0c;把前面命令处理完的内容交给后面&#xff0c;例如 cat filename | grep hello …

IDEA 中的奇技淫巧

IDEA 中的奇技淫巧 书签 在使用ctrlalt方向键跳转时&#xff0c;或者追踪代码时&#xff0c;经常遇到的情况是层级太多&#xff0c;找不到代码的初始位置&#xff0c;入口。可以通过书签的形式去打上一个标记&#xff0c;后续可以直接跳转到书签位置。 标记书签&#xff1a;c…

C# GetField 方法应用实例

目录 关于 C# Type 类 GetField 方法应用 应用举例 心理CT设计题 类设计 DPCT类实现代码 小结 关于 C# Type 类 Type表示类型声明&#xff1a;类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义&#xff0c;以及开放或封闭构造的泛型类型。调用 t…

新媒体运营-----短视频运营-----PR视频剪辑----视频调色

新媒体运营-----短视频运营-----PR视频剪辑-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/138079659 文章目录 1. Lumetri调色&#xff0c;明暗对比度2. Lumetri调色&#xff0c;创意与矢量示波器2.1 创意2.2 矢量示波器 3. L…

前端开发攻略---用原生JS在网页中也能实现语音识别

1、语音识别的过程 语音识别涉及三个过程&#xff1a;首先&#xff0c;需要设备的麦克风接收这段语音&#xff1b;其次&#xff0c;语音识别服务器会根据一系列语法 (基本上&#xff0c;语法是你希望在具体的应用中能够识别出来的词汇) 来检查这段语音&#xff1b;最后&#xf…