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

springboot 整合 rabbitMQ(1)

目录

一、MQ概述

二、MQ的优势和劣势

 三、常见的MQ产品

RabbitMQ使用步骤

第一步:确保rabbitmq启动并且可以访问15672

第二步:导入依赖

第三步:配置

auto自动确认

manual手工确认(推荐使用!可以防止消息丢失)

第四步:编写生产者和消费者


一、MQ概述

  MQ 全称是Message Queue(消息队列),是在消息传输过程中保存消息的容器,多用于分布式         系统之间进行通信。

二、MQ的优势和劣势

   优势

  • 应用解耦  :  系统的耦合性越高,容错性就越低,可维护性就越低,使用MQ 使得应用间解耦, 提升容错性和可维护性。

  • 异步提速 :  提升用户体验和系统吞吐量(单位时间内处理请求的数目)。

  • 削锋填谷 :  使用了MQ之后,限制消费消息的速度为2000,这样一来,高峰期产生的数据势必 会被积压在 MQ中,高峰 就被“”掉了。但是因为消息积压,在高峰期过后的一段时间内,消费消息的速度还是会维持在1000,直到消费完积压的消息,这就叫做 填谷”。使用MQ后,可以提高系统稳定性。

  劣势

  • 系统的可用性降低  :  引入的外部依赖越多,系统稳定性越差,一旦MQ宕机,会对业务系统造  成影响。如何保证MQ的高可用?

  • 系统复杂度提高  :   MQ的加入增加了系统的复杂度,以前是系统间同步的远程调用,现在是      通过MQ进行一部调用,怎么处理消息丢失情况?如何保证消息传递的顺序性。

  • 一致性问题  :  A系统发给BCD系统,若其中一个系统处理数据失败,如何保证消息数据处理的  一致性问题。

 三、常见的MQ产品

RabbitMQ使用步骤

第一步确保rabbitmq启动并且可以访问15672

第二步导入依赖

        <!-- rabbitmq --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>

第三步配置

rabbitmq:host: ipport: 5672username: guestpassword: guestvirtual-host: /listener:simple:prefetch: 1 # 默认每次取出一条消息消费, 消费完成取下一条acknowledge-mode: manual # 设置消费端手动ack确认  不写默认为自动确认(auto)retry:enabled: true # 是否支持重试publisher-confirm-type: correlated  #确认消息已发送到交换机(Exchange)publisher-returns: true  #确认消息已发送到队列(Queue)     

auto自动确认

  1. 消息成功被消费,没有抛出异常,则自动确认,回复ack。
  2. 当抛出ImmediateAcknowledgeAmqpException异常,则视为成功消费,确认该消息。
  3. 当抛出AmqpRejectAndDontRequeueException异常的时候,则消息会被拒绝丢弃,并且不会重新入队。
  4. 其他的异常,则消息会被拒绝,且requeue = true(默认就是true)时会重新入队

manual手工确认(推荐使用!可以防止消息丢失)

无论有没有异常,标准只有是否主动调用basicAck()、basicNack()等方法,没有调用则一直阻塞.

因此有异常时,(有重试就重试),抛出异常后,没有调用时,还是会一直阻塞。即使是auto模式的那两个特殊的异常,在manual中都是一样的,不会有特殊处理.

官网对应模式介绍:RabbitMQ Tutorials | RabbitMQ

第四步编写生产者和消费者

        这里写一个登录成功发送消息给登录人的业务(普通队列模式) 

  • P:生产者,也就是要发送消息的程序
  • C:消费者:消息的接受者,会一直等待消息到 

生产者

        

  1. String exchange(交换机名)

    • 交换器的名称。交换器是一种逻辑实体,用于分发消息到相应的队列。你可以创建自定义的交换器类型,如 Direct、Fanout、Topic 或者 Headers 等。
  2. String routingKey(队列名)

    • 路由键。它是消息与队列之间的桥梁,决定了消息将被发送到哪个队列。路由键的值应匹配队列绑定到交换器时所使用的键。
  3. Object message(消息对象)

    • 要发送的消息对象。这个对象将被转换成字节流,然后发送到 RabbitMQ。Spring AMQP 使用 MessageConverter 将 Java 对象转换为 AMQP 格式的字节流。默认情况下,SimpleMessageConverter 可以处理简单的字符串、Java 序列化对象等。你可以通过配置 RabbitTemplate 的 messageConverter 属性来自定义消息转换器。
  4. MessagePostProcessor messagePostProcessor

    • 这是一个接口,用于在消息发送前对其进行进一步的修改。你可以在这个处理器中设置消息头、属性或其他特定信息。MessagePostProcessor 接口有一个方法 postProcessMessage(Message message),你可以在这里修改消息实例。
  5. CorrelationData correlationData

    • 相关数据,主要用于跟踪消息的发送结果。在异步发送消息的情况下,你可以使用此参数来关联发送请求和响应。CorrelationData 包含一个唯一标识符,用于识别消息。当收到响应时,可以通过这个标识符找到原始请求。

      

        发邮件是发给一个人,所以这里只需要传一个队列名和登录人对象。(发送给多个队列时需            要用到交换机)

        

消费者:

//@Header从消息头中提取消息的递送标签,标签是唯一的,对应唯一的消息
@RabbitListener(queuesToDeclare = @Queue("login_queue"))
public void test01(User getUser, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long         deliveryTag)
{try {发送邮件的代码……//手动确认消息channel.basicAck(deliveryTag,true);} catch (MessagingException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}

 如果配置了手工消费,一定要消费完后手动确认消息,不然就会重复接收该消息,导致后面的消息接受不到!

         

相关文章:

springboot 整合 rabbitMQ(1)

目录 一、MQ概述 二、MQ的优势和劣势 三、常见的MQ产品 RabbitMQ使用步骤 第一步&#xff1a;确保rabbitmq启动并且可以访问15672 第二步&#xff1a;导入依赖 第三步&#xff1a;配置 auto自动确认 manual手工确认&#xff08;推荐使用&#xff01;可以防止消息丢失&a…...

Appium Device Farm安装教程

环境要求&#xff1a;Appium version ≥ 2.4.X 安装appium npm install -g appium2.11.3 如果安装提示如下问题 npm error code EEXIST npm error syscall rename npm error path /Users/wan/.npm/_cacache/tmp/d5787519 npm error dest /Users/wan/.npm/_cacache/content-…...

异常、基类

异常 人生和世界总是充满着意外&#xff0c;争议、冲突和战争似乎是人类必然经历的过程。程序执行也有不满的时候。 不同编程语言的异常 Ada/Modula-3是早期引入异常处理的语言。 C语言没有标准意义的异常&#xff0c;使用goto或setjmp模拟错误或异常发生时的处理流程。 C/Java…...

VScode 自定义代码配色方案

vscode是一款高度自定义配置的编辑器, 我们来看看如何使用它自定义配色吧 首先自定义代码配色是什么呢? 看看我的代码界面 简而言之, 就是给你的代码的不同语义(类名, 函数名, 关键字, 变量)等设置不同的颜色, 使得代码的可读性变强. 其实很多主题已经给出了定制好的配色方案…...

MuMu模拟器12 KitsumeMask安装教程

这里是引用"> 在MuMu模拟器上安装KitsumeMask的时候遇到安装失败的情况。 一、下载APK安装包 如果你没有apk安装包可以通过下面的百度网盘进行下载 通过网盘分享的文件:KitsumeMask 链接: https://pan.baidu.com/s/1yeq3I6BsUD7J6uI-bnk-Vw?pwd=7n3v 提取码: 7n3v 二…...

Perforce静态分析工具2024.2新增功能:Helix QAC全新CI/CD集成支持、Klocwork分析引擎改进和安全增强

Perforce Helix QAC和Klocwork的最新版本对静态分析工具进行了重大改进&#xff0c;通过尽早修复错误、降低开发成本和加快发布速度&#xff0c;使开发团队实现左移。 本文中&#xff0c;我们将概述2024.2版本的新特性和新功能。 CI/CD和左移以实现持续合规性 现代软件开发实…...

太阳能电池特性及其应用

中南民族大学-通信工程2024-大学物理下实验 目录 代码实现结果显示 &#x1f6e0;工具使用 MarsCode&#xff08;插件&#xff0c;集成在PyCharm&#xff09;&#xff1b; python编程&#xff08;豆包AI智能体&#xff09; &#x1f4bb;编程改进 此处是用「Matplotlib」来作图…...

日语学习零基础生活日语口语柯桥外语学校|股票用日语怎么说?

在日语中&#xff0c;“股票”可以说&#xff1a; • 株&#xff08;かぶ&#xff09; 这是最常用的表达方式&#xff0c;直接表示“股票”。 例如&#xff1a; 株を買う - 买股票 株を売る - 卖股票 • 株式&#xff08;かぶしき&#xff09; 这个词也是“股票”的意…...

第2关:寻找一个序列中的第K小的元素(即第k小元问题)

[TOC]寻找一个序列中的第K小的元素&#xff08;即第k小元问题&#xff09; 对于给定的含有n(n<100)元素的无序序列&#xff0c;求这个序列中第k&#xff08;1≤k≤n&#xff09;小的元素。 任务描述 本关任务&#xff1a;编写一个能计算数组中的第k小的元素的小程序。 相关…...

docker 搭建 vue3 + vite

vue3发布了,今天就分享一下我使用docker 搭建 vue3 vite 开发环境。至于为什么使用docker搭建&#xff0c;因为多版本可以快速切换&#xff0c;和本地环境避免冲突。好了话不多说我们开始吧。 1. 准备资料 Docker Desktop wsl2 ubuntu 下载地址 : https://www.docker.…...

【网易云音乐】--源代码分享

最近写了一个网易云音乐的音乐实现部分&#xff0c;是通过JavaScript和jQuery实现的&#xff0c;具体效果大家可以参照下面的视频 源代码分享 - git地址: 网易云音乐源代码 下面将着重讲解一下音乐实现部分 视频有点模糊&#xff0c;不好意思&#xff0c;在b站上添加视频的时候…...

股市大涨下的会展业创新者

近期&#xff0c;股市涨势强劲有力&#xff0c;各大指数普遍上扬&#xff0c;市场活力空前。与此同时&#xff0c;伴随全球经济逐步复苏及会展行业不断发展&#xff0c;上市展览公司机遇与挑战并存。国内外市场需求持续增长拓展了广阔发展空间&#xff0c;但同时行业竞争愈发激…...

工具篇-完整的 Git 项目管理工具教程(在命令框中使用 Git、在 IDEA 中使用 Git)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Git 概述 2.0 Git 的安装和配置 3.0 获取本地仓库 3.1 基础操作指令 3.2 分支 4.0 Git 远程仓库 4.1 创建远程仓库 4.2 配置 SSH 公钥 4.3 操作远程仓库 5.0 使用…...

关于Amazon Linux 2023的版本及包管理器

在亚马逊上创建EC2实例时&#xff0c;会看到有一个Amazon Linux镜像。 那这个镜像与其他Linux有什么关系和区别呢&#xff1f; 网站是介绍&#xff1a;Amazon Linux 2023 是基于 Linux 的现代化通用操作系统&#xff0c;提供 5 年的长期支持。它针对 AWS 进行了优化&#xff0…...

Java面向对象编程--高级

目录 一、static关键字 1.1 静态变量 1.2 静态内存解析 1.3 static的应用与练习 二、单例设计模式 2.1 单例模式 2.2 如何实现单例模式 三、代码块 3.1 详解 3.2 练习&#xff0c;测试 四、final关键字 五、抽象类与抽象方法 5.1 abstract 5.2 练习 六、接口 6.…...

Vert.x,Web - 静态资源/模板

静态资源 Vert.x-Web带有开箱即用的处理器(StaticHandler)&#xff0c;用于处理静态Web资源(.html, .css, .js, …)&#xff0c; 因此可以非常轻松地编写静态Web服务器。 默认静态文件目录为类路径下的webroot目录&#xff0c;对于maven的项目&#xff0c;按规范放在src/main/…...

OpenAI今天Open了一下:开源多智能体框架Swarm

来源 | 机器之心 毫无疑问&#xff0c;多智能体肯定是 OpenAI 未来重要的研究方向之一&#xff0c;前些天 OpenAI 著名研究科学家 Noam Brown还在 X 上为 OpenAI 正在组建的一个新的多智能体研究团队招募机器学习工程师。 就在几个小时前&#xff0c;这个或许还没有组建完成的新…...

车辆重识别(2021NIPS无分类器扩散指南)论文阅读2024/10/08

[1] CLASSIFIER-FREE DIFFUSION GUIDANCE&#xff08;无分类器扩散指导&#xff09; (NIPS 2021) 作者&#xff1a;Jonathan Ho & Tim Salimans 单位&#xff1a;Google Research, Brain team&#xff08;谷歌团队&#xff09; 摘要&#xff1a; 分类器指导是最近引入的一…...

JavaSE——认识异常

1.概念 在生活中&#xff0c;人有时会生病&#xff0c;在程序中也是一样&#xff0c;程序猿是一帮办事严谨、追求完美的高科技人才。在日常开发中&#xff0c;绞尽脑汁将代码写的尽善尽美&#xff0c;在程序运行过程中&#xff0c;难免会出现一些奇奇怪怪的问题。有时通过代码很…...

嵌入式数据结构中顺序栈用法

第一:嵌入式C语言中栈特点 栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈),允许进行操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”。特点 :后进先出(LIFO)。...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...