【中间件】RabbitMQ入门

news2024/11/17 16:39:08

  

       📝个人主页:五敷有你      

 🔥系列专栏:中间件

⛺️稳中求进,晒太阳

MQ的优劣:

优势

  1. 应用解耦:提升了系统容错性和可维护性
  2. 异步提速:提升用户体验和系统吞吐量
  3. 消峰填谷:提升系统稳定性

劣势

  1. 系统可用性降低
    1. 系统引入的外部依赖越多,系统稳定性越差,一旦MQ宕机,就会对业务造成影响,如何保证MQ的高可用
  2. 系统复杂度提高
    1. MQ的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是拖过MQ进行异步调用,如何保证消息没有被重复消费?怎么处理消息丢失情况?怎么保证消息传递的顺序性?
  3. 一致性问题
    1. A系统处理完业务,通过MQ给B、C、D系统发送数据,如果B系统,C系统处理成功,D系统处理失败,如何保证消息数据处理的一致性。

既然MQ有优势也有劣势,那么怎么使用MQ需要满足什么条件呢?

  1. 生产者不需要从消费者处获得反馈,引入消息队列之前直接调用,其接口的返回值应该为空,这才让明明下层的动作还没做,上层却当成动作做完了,继续往后走,即所谓异步成了可能
  2. 容许短暂的不一致性
  3. 确实是用了有效果,即解耦、提速、晓峰方面的收益,超过了加入MQ,管理MQ的成本

常见的MQ产品

RabbitMQ简介

AMQP

AMQP,即Advanced Message Queuing Protocol ,是一个网络协议,是应用层协议的一个开发标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。

RabbitMQ的基础架构

相关概念

  • Broker:接收和分发消息的应用,RabbitMQ Server就是Message Broker
  • Virtual host:出于多租户和安全因素的考虑,把AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。当多个不同的用户使用同一个RabbitMQ server提供的服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange/queue等。
  • Connection:publisher/consumer和broker之间的TCP连接
  • Channel:如果每一次访问RabbitMQ都建立一个Connection,在消息量大的时候建立TCP Connection的开销将是巨大的,效率也较低,Channel是在connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的channel进行通讯,AMQP method包含了channel id帮助客户端和message broker识别channel ,所以channel之间是完全隔离的,Channel作为轻量级的Connection极大减少了操作系统建立TCP connection的开销
  • Exchange:message到达broker的第一站,根据分发规则,匹配查询表中的routing key,分发消息到queue中去,常用的类型有:direct,topic,
  • Queue:消息最终被送到这里等待consumer被取走
  • Binding:exchange 和 queue 之间的虚拟连接,binding中可以包含routing key 。Binding信息被保存到exchange中的查询表中,用于message的分发依据

RabbitMQ的6中工作模式

JMS

  • JMS,即Java消息服务(JavaMessage Service) 应用程序接口,是一个Java平台中关于面向中间件的API
  • JMS是JavaEE规范的一种,类似JDBC
  • 很多中间件都实现类JMS规范.

快速入门

这个直接通过队列进行通信的

  1. 引入spring-boot-starter-amqp
  2. 配置rabbitmq服务端信息
spring:
  rabbitmq:
    host: ip
    port: 5672
    virtual-host: /
    username: MeetRys
    password: 123456
  1. 利用RabbitTemplate发送消息
@Autowired
private RabbitTemplate rabbitTemplate;

@Test
void testSendMessage2Queue() {
    String queueName1 = "MeetRys01";
    String queueName2 = "MeetRys02";
    String msg = "hello word";
    rabbitTemplate.convertAndSend(queueName1, msg);
    rabbitTemplate.convertAndSend(queueName1,msg);

}

        2.利用@RabbitListener注解声明要监听的队列

@Slf4j
@Component
public class MqListener {

    @RabbitListener(queues = "MeetRys01")
    public void listenSimpleQueue(String msg){
        System.out.println("消费者1收到了MeetRys01的消息:【" + msg +"】");
    }


   }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1491442.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring云原生】Spring官宣,干掉原生JVM,推出 Spring Native!整体提升性能!Native镜像技术在Spring中的应用

🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《Spring 狂野之旅:从入门到入魔》 🚀 本…

c++的队列的用法

基本介绍 c的队列就是std::queue。 需要包含的头文件&#xff1a; #include<queue>queue就是先进先出队列 queue,就是队列&#xff0c;队列是一种容器适配器&#xff0c;专门设计用于在FIFO上下文中操作(先进先出)&#xff0c;其中将元素插入容器的一端并从另一端提…

LangChain 教程:构建 LLM 支持的应用程序的指南

作者&#xff1a;Aditya Tripathi GPT-4 和 LLaMA 等大型语言模型 (LLM) 在过去几年中创造了一个充满可能性的世界。 它预示着人工智能工具和应用程序的繁荣&#xff0c;ChatGPT 似乎一夜之间成为家喻户晓的名字。 但如果没有为促进新一代应用程序而创建的强大工具和框架&#…

【面试题】webpack的五大核心、构建流程、性能优化

【面试题】webpack的五大核心、webpack的构建流程、webpack的性能优化 webpack是什么?webpack的五大核心webpack的构建流程webpack性能优化 webpack是什么? js静态模块打包工具。 功能 将多个文件打包成更小的文件&#xff0c;(压缩)翻译 babal-loader es6进行降级兼容。 …

【pyinstaller打包记录】Linux系统打包可执行文件后,onnxruntime报警告(Init provider bridge failed)

简介 PyInstaller 是一个用于将 Python 程序打包成可执行文件&#xff08;可执行程序&#xff09;的工具。它能够将 Python 代码和其相关的依赖项&#xff08;包括 Python 解释器、依赖的模块、库文件等&#xff09;打包成一个独立的可执行文件&#xff0c;方便在不同环境中运行…

如何根据企业司法涉诉大数据合理规避风险?

在当前的商业环境中&#xff0c;企业司法涉诉的信息越来越成为衡量一家企业信誉和运营风险的重要标准。大数据时代的到来&#xff0c;让我们有了更加丰富的手段对这些信息进行挖掘与分析&#xff0c;从而对企业可能面临的风险进行预警。本文将探讨如何通过对企业司法涉诉的大数…

服务器硬件监控,保障系统稳健运行的关键策略

服务器硬件在运维中扮演着至关重要的角色&#xff0c;超过一半的网络中断是由硬件故障引起的&#xff0c;这使得硬件性能监控成为运维中不可或缺的一部分。对于一个组织或企业的信息技术基础设施而言&#xff0c;重要性不言而喻&#xff1a; 1. 安全性&#xff1a;服务器硬…

虚拟内存地址动静态库

前言 大家好我是jiantaoyab&#xff0c;这是我所总结作为学习的笔记第5篇,在这里分享给大家,还有一些书籍《[深入理解计算机系统》《计算机组成&#xff1a;结构化方法》《计算机体系结构&#xff1a;量化研究方法》《程序员的自我修养》&#xff0c;今天我们来了解程序的虚拟…

聚观早报 | 2024款腾势D9将发布;岚图汽车2月销量

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 3月2日消息 2024款腾势D9将发布 岚图汽车2月销量 苹果Vision Pro防汗新专利 真我12 Pro正式开售 Redmi K70/Pro…

wvp-gb28181-pro国标设备录像下载

点击【国标设备】&#xff0c;进入设备通道 每个通道右边都有对应的操作&#xff0c; 点击操作栏中的【设备录像】按钮 点击【设备录像】进入录像查看页面&#xff0c;选择要查看的日期即可对录像进行播放和下载 播放&#xff1a;双击录像名称 下载&#xff1a;点击下载按钮 下…

SpringBoot实现分页模糊查询

1. Navicat查询数据 Navicat中查询所有数据 SELECT * FROM sys_user;Navicat中查询前两条数据&#xff08;俩种方式&#xff09; SELECT * FROM sys_user LIMIT 2; //从0开始&#xff0c;第一个参数是起始位置即(pageNum-1)*pageSize&#xff0c;第二个参数是步长 SELECT * …

一文搞定Pytorch CUDA Toolkit与Driver的关系

1. 在我们使用Pytorch不同的版本时&#xff0c;有这样一个大致的对应关系&#xff0c;即&#xff1a;Pytorch版本CUDA Toolkit版本NVIDIA Driver 版本。 难点在于CUDA版本与Driver版本的关系&#xff0c;简单通过NVIDIA官网解决&#xff1a;CUDA Compatibility 这里既有关于Li…

JavaScript的`call`方法:实现函数间的调用!

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Golang 程序启动原理详解

一.编译 go源代码首先要通过 go build 编译为可执行文件,然后去机器上直接执行的&#xff0c;在 linux 平台上为 ELF 格式的可执行文件&#xff0c;linux 能直接执行这个文件,而编译阶段会经过编译器、汇编器、链接器三个过程最终生成可执行文件 编译器&#xff1a;*.go 源码通…

基于“xxx” Androidx平台的驱动及系统开发 之 触摸板篇

目录 一、基于全志 A133 Android10平台&#xff0c;适配1366x768 - ilitek2511触摸1、原理图分析2、驱动移植与适配3、补丁和资源文件 二、基于瑞芯微 RK3566 Android11平台&#xff0c;适配GT9XX触摸1、原理图分析2、补丁及资源文件 三、遇到的问题与解决1、基于amlogic Andro…

【Leetcode】1588.所有奇数长度子数组的和

题目描述 思路 题目要求我们求解所有奇数长度数组的和。若暴力循环求解&#xff0c;时间复杂度过高。所以&#xff0c;我们可以采用前缀和优化。 如上图输入arr数组&#xff0c;sum[i]用于计算arr数组中前i个数的和。(在程序中&#xff0c;先给sum[0]赋值&#xff0c;等于arr[0…

python.模块与包

1.模块是什么 本质上是一种python文件&#xff0c;以.py结尾&#xff0c;里面有类&#xff0c;函数&#xff0c;变量等&#xff0c;认为这是一个工具包&#xff0c;每个模块有不同的功能&#xff0c;导入后可以直接使用 2.模块的导入 方法1 import 模块名 使用&#xff1a…

LLM 模型量化推理速度评测

最近了解了下些常见的推理和加速方案&#xff1a; 1、量化方案&#xff1a; gptq、quantization、int8、int4、AWQ、Speculative Decoding、GGUF 2、Attention加速方案&#xff1a; atten的不同种类fused attention 3、内存层面&#xff1a; kv_cache策略、page_attention…

洛谷 P1083 [NOIP2012 提高组] 借教室(二分+差分)

题目链接&#xff1a; P1083 [NOIP2012 提高组] 借教室 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 在大学期间&#xff0c;经常需要租借教室。大到院系举办活动&#xff0c;小到学习小组自习讨论&#xff0c;都需要向学校申请借教室。教室的大小功能不同&#xff0c;借教…

YOLO系列中的“data.yaml”详解!

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、data.yaml介绍 YOLO系列中的data.yaml文件包含了YOLO系列模型运行所需要的数据集路径、数据集中的类别数及标签。数据集路径可以用绝对路径也可以…