当前位置: 首页 > news >正文

RabbitMQ实现多线程处理接收消息

前言:在使用@RabbitListener注解来指定消费方法的时候,默认情况是单线程去监听队列,但是这个如果在高并发的场景中会出现很多个任务,但是每次只消费一个消息,就会很缓慢。单线程处理消息容易引起消息处理缓慢,消息堆积,不能最大利用硬件资源,这个就很伤。

处理办法:可以添加配置类,设置RabbitMQ的容器工厂参数,增加并发处理数量即可实现多线程处理监听队列,实现多线程处理消息。

一、编写配置类

package com.quick.config;import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;/*** RabbitMQ配置类*/
@Configuration
/*@ConditionalOnClass(RabbitTemplate.class) //有RabbitTemplate依赖才会生效,否则不生效*/
public class MqConfig {// 定义线程数、最大线程数常量private static final int INITIAL_CONCURRENT_CONSUMERS = 10;private static final int MAX_CONCURRENT_CONSUMERS = 10;/*** 将多线程配置配置注入容器工厂*/@Bean("customContainerFactory")public SimpleRabbitListenerContainerFactory containerFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer,ConnectionFactory connectionFactory) {SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();factory.setConcurrentConsumers(INITIAL_CONCURRENT_CONSUMERS); //设置线程数factory.setMaxConcurrentConsumers(MAX_CONCURRENT_CONSUMERS); //最大线程数configurer.configure(factory, connectionFactory);return factory;}}

  • setConcurrentConsumers(int concurrentConsumers): 这个方法设置了容器应该同时启动的监听器(消费者)线程的数量。这些线程会并发地从RabbitMQ队列中拉取并处理消息。这个值决定了系统初始时能够并行处理消息的能力。

  • setMaxConcurrentConsumers(int maxConcurrentConsumers): 这个方法设置了容器在需要时可以增加到的最大并发消费者数量。这通常用于处理负载高峰,当队列中的消息积压时,可以动态地增加并发消费者数量以提高处理速度。然而,请注意,这并不意味着系统会立即创建所有最大数量的线程,而是会根据需要逐渐增加到这个上限。

这个容器负责监听 RabbitMQ 的队列,并将接收到的消息分发给相应的处理器(即 @RabbitListener 注解标记的方法)

二、修改监听者

在接收消息方里面的@RabbitListener注解中添加配置

@RabbitListener(queues = {"监听队列名"},containerFactory = "customContainerFactory")


/*** 接收消息*/
@Component
public class StoreListener {@Resourceprivate IStoreService storeService;@Resourceprivate StoreMapper storeMapper;/*** 更新店铺收藏人数,实现收藏人数+1* @param storeId 店铺id*/@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "store.addFavorite.success.queue", durable = "true"), // 队列 起名规则(服务名+业务名+成功+队列),durable持久化exchange = @Exchange(name = "addFavorite.direct"), // 交换机名称,交换机默认类型就行direct,所以不用配置directkey = "addFavorite.success" // 绑定的key),// 在@RabbitListener注解中指定容器工厂containerFactory = "customContainerFactory")public void listenAddFavoriteCountsSuccess(Long storeId){storeService.updateStoreFavoriteUsersCountAdd1(storeId);}/*** 根据传过来的店铺实体类修改店铺信息* @param store 店铺实体类*/@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "store.updateStore.success.queue", durable = "true"),exchange = @Exchange(name = "updateStore.direct"),key = "updateStore.success"),// 在@RabbitListener注解中指定容器工厂containerFactory = "customContainerFactory")public void updateStoreByEntity(Store store){storeMapper.updateById(store);}}

多线程的好处:

1、提高吞吐量:通过并行处理消息,系统可以更快地处理大量消息,从而提高整体吞吐量。

2、更好的资源利用率:在多核处理器上,多线程可以更好地利用硬件资源,减少处理延迟。

相关文章:

RabbitMQ实现多线程处理接收消息

前言:在使用RabbitListener注解来指定消费方法的时候,默认情况是单线程去监听队列,但是这个如果在高并发的场景中会出现很多个任务,但是每次只消费一个消息,就会很缓慢。单线程处理消息容易引起消息处理缓慢&#xff0…...

AI智能网关 边缘计算 视觉AI

随着人工智能技术的不断发展,AI智能网关正成为连接现实世界和虚拟智能世界的重要桥梁。作为智能化时代的关键设备,AI智能网关在物联网、工业、市政、无人驾驶、农业、环保、水利等领域起到了至关重要的作用。   首先,AI智能网关是物联网的核…...

Java基础之原反补码

原反补码 学习这个知识点之前,我们先来看一个题目:写出10的二进制形式 答案及解读: ​ 0b 0 0(23个) 0000 1010 ​ 10对应的类型为int,在计算机底层占4字节,需要32个比特位表示 ​ 其中最高位为符号位,0表…...

Unity如何使用Spine动画导出的动画

Unity如何使用Spine动画导出的动画 介绍使用版本Spine导出源文件修改Spine3.8.75版本导入Unity的3.8版本Spine的报错Unity辅助修改Json中版本号方式总结 介绍 最近公司在做抖音小程序的小游戏,我们这边动画部分使用的是spine动画,所以会有spine导入的问…...

变量位操作

对变量的某位取反 a ^(1<<2);//bit2取反 把变量的某位清零 a & ~(1<<2);//bit2清0 把变量的某位置1 a | (1<<2);//bit2置1...

内网渗透—横向移动RDPWinRMWinRSSPN扫描Kerberos攻击

前言 今天仍是横向移动的内容&#xff0c;有些实验能成功&#xff0c;有些实验则各种奇怪的问题导致失败&#xff0c;这都是很常见的。就连小迪在视频中也经常翻车&#xff0c;我们只需要知道原理&#xff0c;以及如何去实现这个攻击行为即可。没必要强求所有的实验都要百分百…...

Python套接字综合应用(UDP篇)

Python套接字综合应用(UDP篇) 1、 主要功能 UDP客户端实现UDP服务端实现输出字体颜色控制响应捕获键盘CtrlC信号套接字异常捕获及处理通信报文16进制格式化输出 2、 Python UDP套接字应用 Windows程序在WinServer2022上验证运行&#xff0c;Linux程序在银河麒麟V10上验证运…...

服务器安装哪吒面板详细教程

本文长期更新地址&#xff1a; 服务器安装哪吒面板详细教程-星零岁的博客https://blog.0xwl.com/13568.html 注&#xff1a;本文中部分内容源自网络&#xff0c;第四步中部分来自本人曾经文章&#xff1a;云服务器安装配置宝塔面板并安装基础运行环境教程-星零岁的博客 今天来讲…...

LLM微调(精讲)-以高考选择题生成模型为例(DataWhale AI夏令营)

前言 你好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者&#xff0c;上一篇文章中&#xff0c;作者介绍了基于讯飞开放平台进行大模型微调的完整流程&#xff1b;而在本文中&#xff0c;作者将对大模型微调的数据准备部分进行深入&#xff1b;…...

安全基础学习-RC4加密算法

这里仅仅记录一些基础的概念。后期有需求进一步扩展。 RC4 是一种对称流加密算法&#xff0c;由罗恩里维斯特&#xff08;Ron Rivest&#xff09;于1987年设计。RC4 的设计目的是提供一种简单且高效的加密方法。尽管 RC4 曾经广泛使用&#xff0c;但它的安全性在现代已受到质疑…...

雨云宁波电信大带宽服务器测评(非广告)

提示&#xff1a;本文非广告&#xff0c;非宣传&#xff01; 本文长期更新地址&#xff1a;雨云宁波电信大带宽服务器测评&#xff08;非广告&#xff09; 雨云现在有一个国内的新区——宁波 宣传的是电信大带宽&#xff0c;可附加100G防御&#xff0c;采用NVME&#xff0c;和铂…...

2024年,最新前端趋势

随着技术的不断发展&#xff0c;前端开发领域在2024年迎来了新的趋势和挑战。对于开发者来说&#xff0c;紧跟这些趋势不仅能提升技术水平&#xff0c;还能在激烈的市场竞争中脱颖而出。今天&#xff0c;我想向大家介绍一款在这波趋势中脱颖而出的开发神器——MemFire Cloud。这…...

Linux静态进程和动态进程查看管理

1.静态进程的查看PS PPID&#xff1a;谁启动的父亲ID USER&#xff1a;运行进程的用户名称 PID&#xff1a;进程ID %CPU&#xff1a;CPU的占用比例占用资源 %MEM&#xff1a;内存使用的占用比例 VSZ&#xff1a;占用虚拟内存多少 RSS&#xff1a;占用实际内存多少 TTY:…...

CPU飙升 怎么定位问题

传统的方法 【top】 查看所有进程占系统CPU的排序&#xff0c;定位是哪个进程搞的鬼。PID那一列就是进程号。 【top -Hp pid】 定位进程中使用 CPU 最高的线程tid 【printf ‘0x%x’ tid】 线程 tid 转化 16 进制,例如printf ‘0x%x’ 11882 得到16进制的 0x2e6a 【jstack…...

The Sandbox 游戏制作教程第 4 章|使用装备制作游戏,触发独特互动

欢迎回到我们的系列&#xff0c;我们将记录 The Sandbox Game Maker 的 “On-Equip”&#xff08;装备&#xff09;功能的多种用途。 如果你刚加入 The Sandbox&#xff0c;On-Equip 功能是 “可收集组件”&#xff08;Collectable Component&#xff09;中的一个多功能工具&a…...

JS 和 JSX、TS 和 TSX 的区别

1. JS&#xff08;JavaScript&#xff09; 定义与特性&#xff1a; JavaScript&#xff08;简称JS&#xff09;是一种轻量级、解释型或即时编译型的编程语言。它基于原型编程、多范式的动态脚本语言&#xff0c;支持面向对象、命令式、声明式、函数式编程范式。JavaScript 是…...

25款极氪007上市,小米SU7就不该买?

文 | AUTO芯球 作者 | 谦行 我是刚刚才知道 买小米SU7的原来是盯着他这两个功能 可爱的小女孩喊小爱同学帮她停个车 妈妈给她说SU7自己能停好&#xff0c;她还叮嘱一句“小爱同学你给我好好停” SU7滴溜溜的就停在车位上&#xff0c;全程不到一分钟 视频属实温馨&#x…...

旋转字符串 | LeetCode-796 | 模拟 | KMP | 字符串匹配

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f579;️KMP算法练习题 LeetCode链接&#xff1a;796. 旋转字符串 文章目录 1.题目描述&#x1f351;2.题解&#x1fad0;2.1 暴力解法&#x1fad2;2.2 模拟…...

网络安全测试工具Burp Suite基本使用

一、介绍 Burp Suite 是一款由 PortSwigger 开发的集成网络安全测试工具&#xff0c;广泛用于渗透测试和漏洞扫描。它提供了一系列功能强大的工具和功能&#xff0c;帮助安全研究人员和渗透测试人员识别和修复 Web 应用程序中的安全漏洞。以下是 Burp Suite 的主要功能和特点&…...

使用pytest+selenium编写网页UI自动化脚本和用例

1 UI自动化测试 UI自动化测试&#xff08;User Interface Automation Testing&#xff09;是一种通过编写脚本或使用自动化测试工具&#xff0c;对界面&#xff08;UI&#xff09;进行自动化测试的方法。原理主要是模拟用户打开客户端或网页的UI界面&#xff0c;自动化执行用户…...

新能源遇“秋老虎”,8月第二周销量集体下滑,问界惨遭腰斩

文/王俣祺 导语&#xff1a;随着日前7月份乘用车销量的公布&#xff0c;我们发现7月并没有因6月各车企的“冲量”行为迎来反噬&#xff0c;对于这种“淡季不淡”的现象市场上一片看好。但从近日公布的8月销量数据来看&#xff0c;人们对于“秋老虎”的恐怖可以说是一无所知。随…...

SEO模板网站的wordpress主题最适合google外贸SEO

在寻找最适合Google外贸SEO的WordPress主题时&#xff0c;有几个关键因素需要考虑&#xff1a;速度、SEO友好性、多语言支持、以及是否易于定制。以下是一些推荐的WordPress主题&#xff0c;它们不仅速度快&#xff0c;而且对SEO非常友好&#xff0c;非常适合外贸网站&#xff…...

fetch跨域请求数据的前端设置和后端php的header设置

跨源请求&#xff0c;也称为CORS&#xff08;Cross-Origin Resource Sharing&#xff09;请求&#xff0c;是Web开发中常见的一种需求&#xff0c;允许一个网页的JavaScript代码向与该网页不同源的服务器发出HTTP请求。以下是使用JavaScript中的fetch函数进行跨源请求的一个基本…...

Ted靶机

信息收集&#xff1a; 靶机地址&#xff1a;https://www.vulnhub.com/entry/ted-1,327/ &#xff08;1&#xff09;ip扫描 nmap 192.168.254.0/24 -sn | grep -B 2 00:0C:29:FF:7F:9A &#xff08;2&#xff09;端口扫描 nmap -p- -A 192.168.254.159 &#xff08;3&#x…...

HarmonyOS ArkTS 构建布局

在 HarmonyOS 中&#xff0c;ArkTS 是一种基于 TypeScript 的编程语言&#xff0c;专为开发 HarmonyOS 应用而设计。构建布局是开发应用的关键步骤之一。以下是如何在 ArkTS 中构建布局的基本指南。 1. 创建项目和页面 首先&#xff0c;确保已经创建了一个 HarmonyOS 项目。如…...

yolov5详解(二):通过yaml文件构建完整模型

依然拿yolov5l v6.0版本来讲解 1. yaml文件 以下是yolov5l.yaml文件内容 # YOLOv5 &#x1f680; by Ultralytics, GPL-3.0 license# Parameters nc: 80 # number of classes depth_multiple: 1.0 # model depth multiple width_multiple: 1.0 # layer channel multiple …...

8月8日学习笔记 python基础

1.环境 python2&#xff0c; python3 yum list installed|grep python yum -y install python3 # 最新安装3.12可以使⽤源码安装&#xff0c;教程是在第⼀个星期pdf python3 --version 3.6.8 #进⼊到python的编辑状态 python3 # 如果直接输⼊python&#xff0c;也会进⼊到pyth…...

电动自行车出海黑马Avento独立站拆解(上)丨出海笔记

这次我们来拆解一个电动自行车的独立站 为什么选电动自行车&#xff1f; 因为全球疫情&#xff0c;带来出行问题——避免聚集&#xff0c;大家都减少了公共交通工具&#xff0c;而改为自行车&#xff0c;电动自行车...... 君不见疫情之后无论是出行自行车&#xff0c;还是健…...

Gerrit 使用教程

一、Gerrit简介 Gerrit&#xff0c;一种开放源代码的代码审查软件&#xff0c;使用网页界面。利用网页浏览器&#xff0c;同一个团队的程序员&#xff0c;可以相互审阅彼此修改后的代码&#xff0c;决定是否能够提交&#xff0c;退回或是继续修改。它使用版本控制系统Git作为底…...

sudu提权命令账号安全控制(su命令)执行单个命令并返回原用户、执行多个命令并返回原用户、保持当前环境变量、配置文件/etc/sudoers

su命令 su 命令是 Linux 和 Unix 系统中用于切换用户身份的命令。它允许一个用户变成另一个用户并以该用户的权限运行命令或启动新的 shell 会话。 基本语法 su [选项] [用户名] 用途&#xff1a; su[选项][-][用户[arg]…] 将有效用户id和组id更改为user的id。 A merely-im…...

最便宜做个网站多少钱/网上怎么找人去推广广告

许多人认为 10 月 5 日是 Linux 系统的周年纪念日&#xff0c;因为这是 Linux 在 1991 年首次对外公布的时间。不过&#xff0c;你可能不知道的是&#xff0c;早在 1991 年 8 月 25 日&#xff0c;当年还是大学生的 Linus Torvalds 就向 comp.os.minix 新闻组的人透露了由于 “…...

购物网站排名 2019/搜索引擎登录入口

异步调用除了可以使用多线程以外&#xff0c;spring自已也实现了通过注解进行异步调用的功能&#xff0c;我们只需要进行一些简单的配置&#xff0c;并且在需要异步调用的方法上添加对应的注解即可。 在applicationContext.xml中添加如下&#xff1a; <task:annotation-dri…...

西山区城市建设局网站/湘潭网站建设

汉字是方块的&#xff0c;田字型的&#xff0c;从上到下从左到右的顺序&#xff0c;两个维度&#xff0c;多个自由度&#xff0c;汉字从一开始就不是表音的&#xff0c;它更多的是表达一样东西&#xff0c;它不是语言学意义上的&#xff0c;而只是描述意义的&#xff0c;它因此…...

东莞模具网站建设/网络推广公司联系方式

文章目录 前言I 金字塔大纲秒变成文章II 用SCQA的故事逻辑写序言2.1 写序言的故事模板,也就是制造起伏的模板:2.2 怎么制造冲突?---“反义词”套路,制造冲突2.3 如何把握分享故事的尺度?see also前言 “情境、冲突、问题、回答”,这四大要素中的“问题”,可以省略,并且…...

ue4培训/西安seo管理

快速幂算法&#xff08;全网最详细地带你从零开始一步一步优化&#xff09; 刘扬俊 什么是快速幂算法 再次思考 快速幂算法初步入门 压榨性能再优化 终极优化 参考资料 博客文章版权声明 什么是快速幂算法 首先&#xff0c;我们先来看一道ACM程序设计题&#xff0c;这道…...

php做网站/需要一个网站

如何查看进程的线程数&#xff1f; 1> top , 然后 按 h , 即可显示线程的数量 2> cat /proc/pid(进程号)/status...