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,一经查实,立即删除!

相关文章

Java23种设计模式-行为型模式之访问者模式

访问者模式&#xff08;Visitor Pattern&#xff09;&#xff1a;主要用于解决对象结构中元素的行为操作问题。这种模式允许在不修改对象结构的情况下&#xff0c;为其添加新的操作。 主要角色&#xff1a; 访问者&#xff08;Visitor&#xff09;&#xff1a;定义了一个访问元…

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;可能会…

【SAP ME 27】SAP ME创建开发组件(DC)serviceExt

目录 1、说明 2、创建开发组件(DC) 3、相关性 4、公共部分 5、构建

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;这些都是题外话…

static为什么不能修饰String类

在Java中&#xff0c;static 关键字用于修饰类成员&#xff08;字段、方法、内部类&#xff09;以及代码块&#xff0c;它主要表示这些成员或代码块与类本身关联&#xff0c;而不是与类的实例关联。当你提到 static 不能修饰 String 类时&#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;给我们的工作和生活带…

【AIGC调研系列】Gitlab的Duo Chat与其他辅助编程助手相比的优缺点

GitLab的Duo Chat作为一款AI编程助手&#xff0c;与其他辅助编程助手相比具有一系列的优势和潜在的缺点。 优点方面&#xff1a; 自动化测试与智能代码建议&#xff1a;Duo Chat能够自动生成测试代码&#xff0c;帮助团队提前发现潜在的程序错误&#xff0c;提高软件质量。同…

【Python】爬虫-基础入门

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

企微魔盒V15.6独立版源码+搭建环境教程

企微魔盒V15.6修复已知问题。 搭建教程: 系统环境&#xff1a;CentOS、 运行环境&#xff1a;宝塔 Linux 网站环境&#xff1a;Nginx 1.15.10 MySQL 5.6.46 PHP-7.1-7.3 常见插件&#xff1a;fileinfo &#xff1b; redis