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.mzph.cn/bicheng/4407.shtml

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

相关文章

RV1126添加gc2093摄像头

前言 上篇讲的是双目摄像头GC2053摄像头进行拉流&#xff0c;本篇介绍下如何适配添加RGB Sensor GC2093并且可以在windows上成功拉取视频流 平台背景 开发板&#xff1a;易百纳开发板 cpu: rv1126 sensor: gc2093 200w像素 2lanes type&#xff1a;MIPI kernel: 4.19.111 sys…

K8S深度解析:从入门到精通的全方位指南

目录 一、Kubernetes简介 二、Kubernetes的核心作用 三、Kubernetes架构图例 四、Kubernetes核心概念 Harbor仓库概述&#xff1a; Master----管理组件&#xff1a; API Server&#xff08;集群之心&#xff09;&#xff1a; Scheduler&#xff08;调度大师&…

基于Transformer深度学习的翻译模型(英->中)源码系统

第一步&#xff1a;Transformer介绍 Transformer是一种基于注意力机制的序列到序列模型&#xff0c;它在机器翻译任务中表现出色并逐渐成为自然语言处理领域的主流模型。Transformer模型的核心思想是使用自注意力机制&#xff08;self-attention&#xff09;来捕捉输入序列中各…

Redis系列:内存淘汰策略

1 前言 通过前面的一些文章我们知道&#xff0c;Redis的各项能力是基于内存实现的&#xff0c;相对其他的持久化存储&#xff08;如MySQL、File等&#xff0c;数据持久化在磁盘上&#xff09;&#xff0c;性能会高很多&#xff0c;这也是高速缓存的一个优势。 但是问题来了&am…

如果通过Glide 设置图片圆角

要给图片设置一个圆角,通常方法是在ImageView 标签外添加一个CardView 标签,然后设置圆角值,但是今天遇到一个问题就是 RecyclerView Item 中这样操作的话会遇到这样的一个报错: Cannot call this method while RecyclerView is computing a layout or scrolling androidx.rec…

RLC防孤岛负载测试,你了解多少?

RLC防孤岛负载测试是一种用于检测并防止电力系统中出现孤岛现象的测试方法。孤岛现象是指在电网故障或停电的情况下&#xff0c;部分电网与主电网断开连接&#xff0c;形成一个独立的、不受控制的电力系统。这种情况下&#xff0c;如果不及时切断与孤岛的连接&#xff0c;可能会…

HarmonyOS 应用开发——入门

首先当然是华为的官方文档了&#xff0c;要认真学习: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/start-overview-0000001478061421-V2 不想花时间看&#xff0c;可以看我下面总结的干货&#xff0c;哈哈 第一个问题&#xff1a;stage架构和fa架构的区…

GPU服务器和普通服务器有何区别?

众所周知&#xff0c;服务器是网络中的重要设备&#xff0c;要接受少至几十人、多至成千上万人的访问&#xff0c;因此对服务器具有大数据量的快速吞吐、超强的稳定性、长时间运行等严格要求。 GPU服务器和普通服务器的主要区别在于硬件配置和适用场景&#xff0c;特别是处理器…

应急行业的智能安全帽(高端)

前面介绍了低端、中端安全帽&#xff0c;接着再讲讲高端安全帽。做高端安全帽的企业非常少&#xff0c;估计一只手都数的出来。确实也和智能安全帽这个领域体量有关系&#xff0c;并且他有一个新的“劲敌”——智能眼镜从其他领域瓜分原属于他的市场&#xff0c;这些都是题外话…

Cadence OrCAD学习笔记(1)OrCAD入门介绍

最近换份工作主要用到Cadence&#xff0c;之前都是用AD居多&#xff0c;所以现在也开始记录下Cadence学习过程&#xff0c;方便后面复习。 参考教程&#xff1a; OrCAD视频教程第1期&#xff1a;OrCAD入门介绍_哔哩哔哩_bilibili 本期主要介绍OrCAD的主要部件 其中用的较多的…

【软件开发规范篇】Git分支使用规范

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0c;产…

软考之零碎片段记录(二十七)+复习巩固(十三、十四)

学习 1. 案例题 涉及到更新的。肯能会是数据流的终点E, P, D 数据流转。可能是 P->EP->D(数据更新)P->P(信息处理)D->P(提取数据信息) 2. 案例2 补充关系图时会提示不增加新的实体。则增加关联关系 3. 案例3 用例图 extend用于拓展&#xff0c;当一个用例…

磁盘未格式化,数据恢复大揭秘

一、磁盘未格式化现象概述 在日常使用电脑的过程中&#xff0c;我们有时会遇到磁盘未格式化的提示&#xff0c;这意味着我们的磁盘突然间变得不可识别&#xff0c;所有的数据和文件都似乎消失了。这种情况常常发生在外接硬盘、U盘等存储设备上&#xff0c;给我们的工作和生活带…

【Python】爬虫-基础入门

目录 一、什么是爬虫 二、爬虫的主要用途 三、学会爬虫需要掌握的技能 四、爬虫使用的语言 五、编写爬虫需要的库&#xff0c;以python为例 六、爬虫示例-python 示例一 示例二 示例三 一、什么是爬虫 爬虫&#xff0c;又称网络爬虫或网页爬虫&#xff0c;是一种用来自…

RAG 的是与非、Rewrite 和 Rerank

有时候,我觉得人类还真是种擅长画地为牢的动物,因为突然发现,当人们以文化/理念的名义形成团体/圈子的时候,其结局都不可避免地走向了筛选和区分的道路。或许,大家都不约而同地笃信,在成年人的世界里,那条不成文的社交潜规则——“只筛选不教育,只选择不改变”。与千百…

16.Blender 基础渲染工作流程及安装ACES

安装插件和菜单栏设置 在菜单栏的编辑里打开偏好设置 里面的插件界面 搜索node 给第三个打勾 点击安装&#xff0c;导入cat插件 安装完后&#xff0c;一定要打勾&#xff0c;选择上cat插件 这样N窗口才会显示MMD选项 导入场景 点击打开 把输出模式的帧率改为30fps 按…

Java学习1:java入门

java入门 1.介绍Java java——sun公司——被甲骨文收购 一开始叫Oak&#xff0c;后期改名为java; java之父詹姆斯高斯林 企业级应用开发 JavaSE JavaEE JavaME 高级编程语言 2.搭建开发环境 JDK8&#xff0c;JDK11&#xff0c;JDK17————>LTS长期支持版 ps:在…

效率工具RunFlow完全手册之局域网传输篇

本篇将向您介绍如何使用RunFlow在局域网&#xff08;又称内网&#xff09;内传输文件&#xff0c;同步剪贴板&#xff0c;无论是家庭局域网还是办公室局域网&#xff0c;都能轻松搞定文件传输以及剪贴板同步&#xff0c;如果您还没有安装RunFlow&#xff0c;可点这里去下载。 为…

有效三角形的个数 ---- 双指针

题目链接 题目: 分析: 这道题的意思就是将数组的元素, 拿出三个数, 能构成三角形就是有效的判断是否能构成三角形的条件: 两边之和大于第三边, 我们只需找到三个数中最小的两个数之和是否大于第三边, 大于则可以构成三角形解法一: 暴力解法, 即找到所有的三元组, 并挨个判断,…

X86与FPGA相结合,基于PIB的AI开发——人体姿态识别

人体姿态估计是计算机视觉领域中用于理解和分析人类行为的一个关键技术。它主要涉及到检测和识别图像或视频中人体的各个关键点&#xff0c;并预测这些关键点之间的空间关系&#xff0c;从而构建出人体的骨架模型。 本文将介绍基于PIB板的人体姿态估计案例。这是一个交互式的实…