【开发篇】十八、SpringBoot整合ActiveMQ
文章目录
- 1、安装ActiveMQ
- 2、整合
- 3、发送消息到队列
- 4、使用消息监听器对消息队列监听
- 5、流程性业务消息消费完转入下一个消息队列
- 6、发布订阅模型
1、安装ActiveMQ
docker安装
docker pull webcenter/activemq
docker run -d --name activemq -p 61616:61616 -p 8161:8161 webcenter/activemq
# * 61616是 activemq 的服务端口(映射为61616)
# * 8161是 管理后台端口(对外映射为8161)
访问控制台http://IP:8161
常规安装(安装为系统服务)
下载:
https://activemq.apache.org/components/classic/download/
解压缩即安装:
启动服务:双击bin/win64/activemq.bat
访问控制台:http://127.0.0.1:8161/,用户名&密码:admin
2、整合
导入ActiveMQ的起步依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
加入相关配置:
spring: activemq: broker-url: tcp://localhost:61616 jms: pub-sub-domain: false # JMS的两种模型,点对点、发布订阅模型,这里为true即发布订阅模型template: default-destination: codetest #默认的消息队列的名称
注入JmsMessagingTemplate操作对象,进行消息的发送与接收
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
业务逻辑代码就实现上篇的MessageService接口就行,上篇在拿一个队列模拟MQ,来进行消息的生产与消费,这里有了真正的队列来存储消息了。
3、发送消息到队列
convertAndsend方法,发送消息到消息队列,convert,即转换,转换成能接受的数据类型然后发送,因此这个方法的形参类型可为Object,调用方便。
@Service
@Slf4j
public class MessageServiceActivemqImpl implements MessageService { @Autowired private JmsMessagingTemplate jmsMessagingTemplate; public void sendMessage(String id) { log.info("使用Active将待发送短信的订单纳入处理队列,id:"+id);jmsMessagingTemplate.convertAndSend(id); } public String doMessage() { String id = jmsMessagingTemplate.receiveAndConvert(String.class);log.info("已完成短信发送业务,订单id:" + id);return id; }
}
取消息消费则相反,先receive接收,再convert转换,调用receiveAndConvert,形参为要转的目标类型。调用下上篇的接口(其实controller里就只是调用了一下service层方法),可以看到消息写入成功:
需要指定队列存储消息,则convertAndSend方法和receiveAndConvert方法传参多一个队列名即可。
jmsMessagingTemplate.convertAndSend("order.queue.id",id);
String id = jmsMessagingTemplate.receiveAndConvert("order.queue.id",String.class);
4、使用消息监听器对消息队列监听
实际开发时,自然不用每次去手动取消息,直接@JmsListener
注解监听队列,有消息了就自动拿出来消费(执行逻辑代码)就行:
@Component
@Slf4j
public class MessageListener { @JmsListener(destination = "order.queue.id") public void receive(String id){ //实际业务逻辑代码 log.info("已完成短信发送业务,id:"+id); }
}
重启服务,发现上面发送的消息已被自动消费:
5、流程性业务消息消费完转入下一个消息队列
@SendTo注解将一个方法的返回值给自动加到某个队列里,搭配@JmsListener注解,就可实现消费消息的流转。 当然也可单独使用,就发送就好,像@CachePut
@Component
@Slf4j
public class MessageListener { @JmsListener(destination = "order.queue.id") @SendTo("order.other.queue.id") public String receive(String id){ log.info("已完成短信发送业务,id:"+id); //把这条消息处理完以后,返回return " a handled new id :" + id; }
}
这里对比下发布订阅模型与交换机:消息被消费以后,队列中就没了,如果其他程序也要用,又该如何处理? ==> 发布订阅模型,加入交换机来实现。比如RabbitMQ的Fanout Exchange广播、Direct Exchange路由、Topic Exchange话题。这里是把消息广播或路由到队列,而@SendTo搭配@JmsListener是在代码中处理完消息后的流转。
这种流水线的关系,体现的是一种顺序和依赖的业务。
6、发布订阅模型
spring: activemq: broker-url: tcp://localhost:61616 jms: pub-sub-domain: true #发布订阅模型template: default-destination: codetest #默认的消息队列的名称
此时发消息就在Topics中了:
相关文章:
【开发篇】十八、SpringBoot整合ActiveMQ
文章目录 1、安装ActiveMQ2、整合3、发送消息到队列4、使用消息监听器对消息队列监听5、流程性业务消息消费完转入下一个消息队列6、发布订阅模型 1、安装ActiveMQ docker安装 docker pull webcenter/activemqdocker run -d --name activemq -p 61616:61616 -p 8161:8161 webce…...
QTcpSocket 接收数据实时性问题
一、开发背景 使用 Qt 的 QTcpSocket 接收数据的时候发现数据接收出现粘包的现象,并且实时性很差,通过日志的时间戳发现数据接收的误差在 100ms 以内。 二、开发环境 Qt5.12.2 QtCreator4.8.2 三、实现步骤 在 socket 连接的槽函数设置接收延时时间&…...
前端el-select 单选和多选
el-select单选 <el-form-item label"部门名称" prop"departId"><el-select v-model"dataForm.departId" placeholder"请选择" clearable:style{ "width": "100%" } :multiple"false" filtera…...
【MySQL】Linux 中 MySQL 环境的安装与卸载
文章目录 Linux 中 MySQL 环境的卸载Linux 中 MySQL 环境的安装 Linux 中 MySQL 环境的卸载 在安装 MySQL 前,我们需要先将系统中以前的环境给卸载掉。 1、查看以前系统中安装的 MySQL rpm -qa | grep mysql2、卸载这些 MySQL rpm -qa | grep mysql | args yum …...
机器学习算法分类
学习视频黑马程序员 监督学习 无监督学习 半监督学习 强化学习...
Mysql bin-log日志恢复数据与物理备份-xtrabackup
主打一个数据备份与恢复 binlog与xtarbackup bin-log日志恢复开启bin-log配置bin-log日志恢复 物理备份-xtrabackup三种备份方式安装xtrabackup备份全量备份增量备份差异备份 bin-log日志恢复 bin-log 日志,就记录对数据库进行的操作,什么增删改的操作全…...
JAVA 学习笔记 2年经验
文章目录 基础String、StringBuffer、StringBuilder的区别jvm堆和栈的区别垃圾回收标记阶段清除阶段 异常类型双亲委派机制hashmap和hashtable concurrentHashMap 1.7和1.8的区别java的数据结构排序算法,查找算法堆排序 ThreadLocal单例模式常量池synchronizedsynch…...
网络安全--安全认证、IPSEC技术
目录 1. 什么是数据认证,有什么作用,有哪些实现的技术手段? 2. 什么是身份认证,有什么作用,有哪些实现的技术手段? 3. 什么是VPN技术? 4. VPN技术有哪些分类? 5. IPSEC技术能够…...
Mysql——创建数据库,对表的创建及字段定义、数据录入、字段增加及删除、重命名表。
一.创建数据库 create database db_classics default charsetutf8mb4;//创建数据库 use db_classics;//使用该数据库二.对表的创建及字段定义 create table if not exists t_hero ( id int primary key auto_increment, Name varchar(100) not null unique, Nickname varchar(1…...
第1篇 目标检测概述 —(4)目标检测评价指标
前言:Hello大家好,我是小哥谈。目标检测评价指标是用来衡量目标检测算法性能的指标,可以分为两类,包括框级别评价指标和像素级别评价指标。本节课就给大家重点介绍下目标检测中的相关评价指标及其含义,希望大家学习之后…...
前端和后端是Web开发中的两个不同的领域,你更倾向于哪一种?
前端和后端是Web开发中的两个不同的领域,你更倾向于哪一种? 你可以从以下几个维度谈谈你对前端开发和后端开发的看法。此为内容创作模板,在发布之前请将不必要的内容删除 一、引言 提示:可对前端开发和后端开发进行简要介绍并提出…...
SpringBoot集成MyBatis-Plus实现增删改查
背景 因为学习工具的时候经常需要用到jar包,需要增删查改接口,所以参考文章实现了基于mybatis-plus的增删查改接口。 参考文章:第二十二节:SpringBoot集成MyBatis-Plus实现增删改查 原文中的git地址不存在,本文内容是原文代码修…...
基于STM32设计的智能水产养殖系统(华为云IOT)
一、设计简述 基于STM32设计的智能水产养殖监测系统 1.1 项目背景 随着经济的发展和人口的增长,对水产养殖的需求不断增加。然而,传统的水产养殖方式存在一系列问题,如水质污染、鱼病爆发等。因此,智能化水产养殖技术成为当前热门研究领域。其中,基于物联网技术的智能水产…...
运行软件找不到mfc140u.dll怎么解决,mfc140u.dll是什么文件
"找不到 mfc140u.dll"是一条错误信息,表示您的计算机上缺少一个名为 mfc140u.dll 的动态链接库(DLL)文件。这个文件通常与 Microsoft Visual C Redistributable 相关。Mfc140u.dll 是 Microsoft 基础类库(MFC࿰…...
数据结构(2-5~2-8)
2-5编写算法,在单链表中查找第一值为x的结点,并输出其前驱和后继的存储位置 #include<stdio.h> #include<stdlib.h>typedef int DataType; struct Node {DataType data; struct Node* next; }; typedef struct Node *PNode; …...
浅谈智能安全配电装置在老年人建筑中的应用
摘要:我国每年因触电伤亡人数非常多,大多数事故是发生在用电设备和配电装置。在电气事故中,无法预料和不可抗拒的事故是比较少的,大量用电事故可采取切实可行措施来预防。本文通过结合老年人建筑的特点和智能安全配电装置的功能&a…...
【ES】笔记-ES6模块化
暴露数据引入模块语法 规范基本语法分别暴露 (按需暴露)统一暴露 export {暴露内容1,暴露内容2}默认暴露 (适合只暴露一个数据) 只能暴露一次同时使用在app.js中引入 规范 每个文件都是一个模块要借助Babel和Browserify依次编译代码,才能在浏览器端运行…...
阿里云/腾讯云国际站代理:腾讯云国际站开户购买EdgeOne发布,安全加速一体化方案获业内认可
作为下一代CDN产品面世的腾讯云EdgeOne,历时一年服务,腾讯云国际站凭借安全加速一体化的解决方案,用All in One 架构构筑边缘应用无限想象。 近年来,随着5G网络、物联网、边缘计算的快速发展,爆炸式增长的数据量和市场…...
AIGC AI绘画 Midjourney 的详细使用手册
Midjourney参数提示与用法。 常见的命令有: --seed:种子值 --q:品质 --c:混乱 --no:负面提示 --iw:权重(0.5-2) ::(多重提示) -- repeat(重复) --stop(停止) --title(无缝贴图:适用于模型版本 1、2、3、5) --video(过程动画,适用于模型版本 1、2…...
Lua系列文章(1)---Lua5.4参考手册学习总结
windows系统上安装lua,下载地址: Github 下载地址:https://github.com/rjpcomputing/luaforwindows/releases 可以有一个叫SciTE的IDE环境执行lua程序 1 – 简介 Lua 是一种强大、高效、轻量级、可嵌入的脚本语言。 它支持过程编程, 面向对…...
Leetcode.121 买卖股票的最佳时机
题目链接 Leetcode.121 买卖股票的最佳时机 esay 题目描述 给定一个数组 p r i c e s prices prices ,它的第 i i i 个元素 p r i c e s [ i ] prices[i] prices[i] 表示一支给定股票第 i i i 天的价格。 你只能选择 某一天 买入这只股票,并选择在…...
IDE相关设置和插件
https://www.jetbrains.com/zh-cn/webstorm/ 一、插件 Chinese (Simplified) Language Pack:中文语言包Translation:翻译插件,需要申请国内翻译软件应用,可以搜索translations配置快捷键any-rule:正侧插件&#…...
nodejs之jsdom插件,运行浏览器环境
https://www.npmjs.com/package/jsdom 一、安装依赖 npm install jsdom二、用法 var jsdom require(jsdom) var { JSDOM } jsdom; var dom new JSDOM(<!DOCTYPE html><html lang"cn"><head></head><body></body></htm…...
运行vite项目报错:await import(‘source-map-support‘).then((r) => r.default.install())
项目场景: Electron vue3 vite项目实现屏幕截图功能 问题描述 运行 npm run dev 启动项目报错 await import(source-map-support).then((r) > r.default.install()) PS D:\study\electron\electronDemo> npm run dev> electronDemo0.0.1 dev D:\study…...
【GIT版本控制】--安装GIT
一、在不同操作系统上安装GIT 在不同操作系统上安装GIT非常容易,以下是针对不同操作系统的安装步骤: 在Windows上安装GIT: 访问 Git官方网站。下载适合您Windows版本的GIT安装程序(32位或64位)。运行下载的安装程序。…...
java 常见api Arrays类
int类型数组 package daysreplace;import java.util.Arrays;public class Test {public static void main(String[] args) {int[] arrays{38,24,42,56,22,44};//直接输出数组名称就是内存地址System.out.println(arrays);//Arrays.toString()会将数组内容转成字符串形式System…...
Java常见设计模式
单例模式:程序自始至终只创建一个对象。 应用场景:1.整个程序运行中只允许一个类的实例时 2.需要频繁实例化然后销毁的对象 3.创建对象时耗时过多但又经常用到的对象 4.方便资源相互通信的环境 懒汉式线程不安全问题解决方案: 双重检查加锁机…...
Hive 【Hive(七)窗口函数练习】
窗口函数案例 数据准备 1)建表语句 create table order_info (order_id string, --订单iduser_id string, -- 用户iduser_name string, -- 用户姓名order_date string, -- 下单日期order_amount int -- 订单金额 ); 2)装载语句 i…...
C++深入学习part_1
Linux下编译C程序 安装g命令:sudo apt install g 编译命令:$ g *.cc 或者 *.cpp -o fileName; hellworld 编译程序可以看到: namespace命名空间 首先,命名空间的提出是为了防止变量重名冲突而设置的。 浅浅试一下࿱…...
leetCode 300.最长递增子序列 (贪心 + 二分 ) + 图解 + 优化 + 拓展
300. 最长递增子序列 - 力扣(LeetCode) 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如ÿ…...
淘宝上 网站建设/整合网络营销外包
虽然,今年受疫情的影响,全国高考时间有所推迟,但也仅仅还有69天了,时间紧任务重。数学作为三大主科之一,在高考中占有150分的重量,它的好坏会直接影响高考的结果。所以,数学成了很多同学高考道路…...
白云区网站建设公/seo网络营销案例分析
在外行人看来,IBM的在线量子体验工具所构建的线路,有点像是计算机科学入门课程。计算的基石——逻辑门,被排列在数字画布上,将输入转化为输出。 但因为这是量子线路,所以这些门修改的不是通常的二进制0或1位ÿ…...
来宾网站制作/网站开发的步骤
题库来源:安全生产模拟考试一点通公众号小程序 2021年安全员-B证(陕西省)报名考试为正在备考安全员-B证(陕西省)操作证的学员准备的理论考试专题,每个月更新的安全员-B证(陕西省)考…...
wordpress 插入图片/百度站内搜索代码
一:概述 1)为什么会出现这个技术?需要解决哪些问题? 2)是什么:(一个软监控,一个展现(zipkin),Sleuth 整合了 Zipkin) …...
简述网站建设的基本流程图/短视频运营是做什么的
为什么80%的码农都做不了架构师?>>> 问题描述 ERROR 1839 (HY000) at line 24: GLOBAL.GTID_PURGED can only be set when GLOBAL.GTID_MODE ON. 解决 在备份数据库时加上参数--set-gtid-purgedoff,避免将gtid信息导出 mysqldump --set-gti…...
wordpress文章末尾/广告推送平台
项目背景和意义 目的:随着中国经济改革的不断发展,大学生的就业形势越来越严峻,就业方向也越来越广泛,就业手段也越来越繁杂。但是随着网络在社会中的普及尤其是社会中的先进群体——大学生,根据网络的普遍性和便利性&…...