当前位置: 首页 > 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)。...

PE结构之绑定导入表

打印绑定导入表 //打印 绑定导入表 BOOL PrintBoundImport(__in char* m_fileName) {char* Filebuffer NULL;if (!GetFileBuffer(m_fileName, &Filebuffer)) return FALSE;PIMAGE_DOS_HEADER LPdosHeader NULL;PIMAGE_NT_HEADERS LPntHeader NULL;LPdosHeader (PIMAGE…...

【python学习】1-2 配置python系统环境变量

1.点击“我的电脑”右键&#xff0c;点击属性&#xff0c;点击“高级系统设置”&#xff0c;再点击环境变量。 2.选择“系统变量”中的Path后&#xff0c;点击编辑。 3.点击新建&#xff0c;添加如图两个路径&#xff0c;即是python安装的路径位置后&#xff0c;点击确定。...

日均千万订单的交易平台设计稿

业务背景 平台主要售卖电子商品和少量特定的实物商品。 经营模式&#xff0c;主要分为平台商家和自营店&#xff0c;自营店的流量占整个平台业务的50%以上&#xff0c;我负责自营店交易履约相关业务。 以前的架构&#xff0c;平台交易和履约中心是所有流量共享&#xff0c;在…...

如何在 iPad 上恢复已删除的历史记录?

iPad 配备了一个名为 Safari 的内置网络浏览器。这是一种在旅途中保持联系和浏览网页的强大且便捷的方式。但如果您不小心删除了浏览历史记录&#xff0c;则尝试恢复它可能会很令人沮丧。 幸运的是&#xff0c;您可以通过多种方法在 iPad 上恢复已删除的 Safari 历史记录。您应…...

Haar cascade训练人脸小模型做人脸辨别

代码讲解 1. 导入必要的库 import cv2 import os from pathlib import Path import shutil import numpy as np import loggingcv2: OpenCV 库&#xff0c;用于图像处理和计算机视觉。os: 提供了一种便携的方式使用操作系统依赖的功能。pathlib.Path: 提供了对象导向的路径处…...

DBA | 如何将 .mdf 与 .ldf 的数据库文件导入到SQL Server 数据库中?

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] 原文链接&#xff1a;DBA | 如何将 .mdf 与 .ldf 的数据库文件导入到SQL Server 数据库中? 如何将 (.mdf) 和 (.ldf) 的SQL Server 数据库文件导入到当前数据库中? Step 1.登录到 Sql Server 服…...

【差分数组】个人练习-Leetcode-3229. Minimum Operations to Make Array Equal to Target

题目链接&#xff1a;https://leetcode.cn/problems/minimum-operations-to-make-array-equal-to-target/description/ 题目大意&#xff1a;给出两个数组nums[]和target[]&#xff0c;可以对nums[]数组进行这样两种操作 给某个区间内的子列全加1给某个区间内的子列全减1 求…...

HTML5--裸体回顾

免责声明&#xff1a;本文仅做分享~ 详情请参考以下&#xff1a; HTML 系列教程 (w3school.com.cn) 菜鸟教程 - 学的不仅是技术&#xff0c;更是梦想&#xff01; --本文是光秃秃的空壳. 标题标签 段落标签 换行和水平线 文本格式化标签 &#xff08;一般用左边的&#xff…...

【网络安全】CVE-2024-46990: Directus环回IP过滤器绕过实现SSRF

未经许可,不得转载。 文章目录 背景漏洞详情受影响版本解决方案背景 Directus 是一款开源 CMS,提供强大的内容管理 API,使开发人员能够轻松创建自定义应用程序,凭借其灵活的数据模型和用户友好的界面备受欢迎。然而,Directus 存在一个漏洞,允许攻击者绕过默认的环回 IP …...

问:JVM的垃圾收集算法你知道哪些,有什么区别?

GC&#xff08;垃圾回收器&#xff09;的概念 GC&#xff0c;即垃圾回收&#xff08;Garbage Collection&#xff09;&#xff0c;是计算机程序中一种自动管理内存的机制。其目的是自动回收不再被使用的对象所占用的内存空间&#xff0c;从而避免内存泄漏和内存溢出&#xff0…...