草庐IT

都2023年了,诸佬们肯定熟知RabbitMQ了吧

小威要向诸佬学习呀 2023-04-14 原文

前言:大家好,我是小威,24届毕业生,曾经在某央企公司实习,目前入职某税务公司。本篇文章将记录和分享RabbitMQ相关的知识点。
本篇文章记录的基础知识,适合在学Java的小白,也适合复习中,面试中的大佬🤩🤩。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,曾经在某央企公司实习,目前在某税务公司实习👏👏

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

以下正文开始

文章目录

🎉初始RabbitMQ

我们接触过队列的时候还是在介绍AQS的时候,在AQS的内部,维护了一个基于FIFO(First Input First Output)的等待队列。对于今天记录的rabbitmq知识,也是一个先进先出的队列,只不过这个队列是存放消息的队列。

RabbitMQ(message queue)消息队列,是RabbitMQ公司基于Erlang开发语言来创建的,其支持多种协议,如AMQP协议,XMPP协议,SMTP协议,STOMP协议等等。

我们在项目中进行同步调用的时候,会遇到很多问题,比如,当服务的生产者出现某些问题,调用这些服务提供者的消费者也会出现问题导致项目不可用;而且同步调用会使得项目的耦合度比较高,当每次加入新的需求时,都需要对源代码进行改造;同步调用的性能也不是那么的好,因为同步调用的上一个步骤完成后,才会进行下一步,如果调用的时间比较长,则需要等待很长的时间。

而异步通信恰好可以解决这些问题。其中,RabbitMQ消息队列,就是异步通信中的一种。

🎇RabbitMQ的优点

上面我们了解到了同步调用的缺点,异步通信的优点,接着我们了解一下RabbitMQ的优点。

🎈应用解耦

以我们平时做的电商项目为例,在电商项目中,我们通常会有支付服务,订单服务,库存系统,物流服务等。比如用户在下完单后,如果耦合地调用订单服务,库存服务,其中如果有一个系统发生故障,都会导致用户下单操作失败。但是如果基于消息队列的方式异步调用时,如果物流服务发生故障,我们只需要花时间来处理物流服务即可,不会影响到用户的下单支付服务。当物流服务的bug处理完成后即可恢复正常。

🎈流量削峰

以我们的生活为例,通常在双十一,双十二时购物优惠力度会很大,在此期间用户订单会很多,如果不对订单流量进行控制,服务器很容易崩掉。因此我们可以将消息队列用来做缓冲,限制订单的个数,或者将某段时间内的订单分散成一段时间处理,一些用户在下完单后的一小段时间内收到下单成功的提醒,这样可以有效地控制极大流量的情况。

🎈异步处理

同步调用需要一步一步地去执行系统,总执行的时间是各子系统模块花销的时间之和,而异步处理可以使得子系统从对应的消息队列中消费自己对应的消息,在自己本地执行相对应的操作。因此异步处理可以极大提升系统的响应速度和吞吐量。

🎊MQ的种类

消息队列的种类有很多,比如为我们所熟知的RabbitMQ,RocketMQ,ActiveMQ,KafKa,接下来简单介绍一下吧。

RabbitMQ公司基于Erlang开发语言来创建的,其支持多种协议,如AMQP协议,XMPP协议,SMTP协议,STOMP协议等等。其可用性比非常高,单机吞吐量一般,消息延迟微秒级别,消息可靠性比较高。

ActiveMQ是有Apache研发的开源中间件,开发语言是用Java来开发的,支持多种编程语言,支持多种协议,如OpenWire协议,STOMP协议,RESY协议,AMQP协议,XMPP协议等,其可用性一般,单机吞吐量略差,消息延迟为毫秒级,消息可靠性一般。

RocketMQ是阿里巴巴公司研发的消息队列的一种,也是由Java语言开发的,RocketMQ的协议支持自定义,高吞吐量,可用性非常高,消息可靠性也比较高,时效性能延迟在毫秒级别。

KafKa是由Apache社区使用Scala和Java语言开发的消息队列,其支持自定义协议,可用性非常高,单机吞吐量非常高,多用于分布式架构,是由阿里开源的,之后交付给了Apache社区,消息可靠性一般。

RabbitMQ在各个方面都表现的挺不错,因此我们可以选择RabbitMQ来学习的。

🧨RabbitMQ组件架构

Publisher :消息的生产者。

Consumer :消息的消费者。

Broker:主要用于接收和分发消息,RabbitMQ Server 就是 Message Broker。

Virtual host:顾名思义,虚拟主机,类似于nacos中的 namespace(命名空间) 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个 vhost,每个用户在自己的 vhost 创建 exchange/queue 等。vhost在连接的时候需要指定,默认的vhost是/。

Connection:生产者和消费者与 broker 之间建立的 TCP 连接。

Channel:中文意思为管道,用于数据双向流通。不管是发布消息、订阅队列还是接收消息,这些动作都是通过管道完成。因为对于操作系统来说,建立和销毁TCP都是非常昂贵的开销,因此引入了管道的概念,以复用一条TCP连接。

Exchange:exchange为交换机,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。

Queue:消息队列,用来保存消息直到发送给消费者。它是存放消息的容器。一个消息可投入一个或多个队列消息,最终被送到这里等待 consumer 取走。

Binding:绑定关系,主要用于交换机和队列之间的关联,binding 中可以包含 routing key,通过路由键(Routing Key)将交换机和消息队列关联起来。

🎍SpringAMQP

我们先来看一下官方给出的SpringAMQP介绍:

Spring AMQP项目将Spring的核心概念应用于基于AMQP的消息传递解决方案的开发。它提供了一个“模板”作为发送和接收消息的高级抽象。它还为带有“监听器容器”的消息驱动的 POJO 提供支持。这些库有助于管理 AMQP 资源,同时促进依赖关系注入和声明性配置的使用。在所有这些情况下,您都会看到与 Spring 框架中的 JMS 支持的相似之处。

特征
用于异步处理入站消息的监听器容器

发送和接收消息的模板

RabbitAdmin,用于自动声明队列,交换和绑定

我们利用SpringAMQP来实现HelloWorld中的基础消息队列功能:
我们首先创建两个模块,publisher生产者模块和consumer消费者,通过在生产者中发送消息,消费者对消息进行处理。
由于publisher模块和consumer模块都需要SpringAMQP依赖,所以在父过程的pom文件中引入依赖:

     <!--AMQP依赖,包含RabbitMQ-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

接着在publisher模块的yaml中配置RabbitMQ的相关地址信息:

logging:
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS
spring:
  rabbitmq:
    host: 192.168.220.135
    port: 5672
    username: xiaowei
    password: 123456
    virtual-host: /

然后在publisher模块的测试类中编写代码:

package cn.itcast.mq.spring;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringAmqpTest {
    @Autowired //自动装配,和我们使用的RedisTemplate相似
    private RabbitTemplate rabbitTemplate;
    @Test
    public void testSendMessage2SimpleQueue() {
        String queueName="simple.queue";
        String message = "hello, spring amqp!";
        rabbitTemplate.convertAndSend(queueName,message);
    }
}

直到此刻,生产者就可以发送消息了,启动项目,登录RabbitMQ官网可看到队列中有一条消息:

之后配置consumer模块的依赖和application.yaml,这个是和生产者一样的:

     <!--AMQP依赖,包含RabbitMQ-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
logging:
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS
spring:
  rabbitmq:
    host: 192.168.220.135
    port: 5672
    username: xiaowei
    password: 123456
    virtual-host: /

接着编写来接收生产者消息的类:

package cn.itcast.mq.listener;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component  //加上注解,交给spring容器来管理
public class SpringRabbitListener {
    @RabbitListener(queues="simple.queue") //simple.queue是创建的队列名称
     public void listenSimpleQueue(String msg){  //由于生产者那里是string类型,因此这里一样类型
        System.out.println("消费者已经接收到simple.queue的消息:[" + msg +  "]");
     }
}

启动consumer模块项目,运行,查看控制台可以看到消费者这里可以得到生产者那里发送的消息:

我们再次打开官网的界面,刷新后会发现,那条消息已经被消费了:

由于篇幅原因,本篇文章就先分享到这里了,后续会继续分享其他的知识,感谢大佬认真读完支持咯~

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论🍻
希望能和诸佬们一起努力,今后进入到心仪的公司
再次感谢各位小伙伴儿们的支持🤞

有关都2023年了,诸佬们肯定熟知RabbitMQ了吧的更多相关文章

  1. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  2. 华为OD机试真题 C++ 实现【带传送阵的矩阵游离】【2023 Q2 | 200分】 - 2

            所有题目均有五种语言实现。C实现目录、C++实现目录、Python实现目录、Java实现目录、JavaScript实现目录题目n行m列的矩阵,每个位置上有一个元素你可以上下左右行走,代价是前后两个位置元素值差的绝对值.另外,你最多可以使用一次传送阵(只能从一个数跳到另外一个相同的数)求从走上角走到右下角最少需要多少时间。输入描述:第一行两个整数n,m,分别代表矩阵的行和列。后面n行,每行m个整数,分别代表矩阵中的元素。输出描述:一个整数,表示最少需要多少时间。

  3. IDEA 2023.1 正式发布,新特性简介 - 2

     昨晚看到IDEA官推宣布IntelliJIDEA2023.1正式发布了。简单看了一下,发现这次的新版本包含了许多改进,进一步优化了用户体验,提高了便捷性。至于是否升级最新版本完全是个人意愿,如果觉得新版本没有让自己感兴趣的改进,完全就不用升级,影响不大。软件的版本迭代非常正常,正确看待即可,不持续改进就会慢慢被淘汰!根据官方介绍:IntelliJIDEA2023.1针对新的用户界面进行了大量重构,这些改进都是基于收到的宝贵反馈而实现的。官方还实施了性能增强措施,使得Maven导入更快,并且在打开项目时IDE功能更早地可用。由于后台提交检查,新版本提供了简化的提交流程。IntelliJIDEA

  4. 2023爱分析·流程中台市场厂商评估报告:微宏科技 - 2

     目录1. 研究范围定义2. 流程中台市场分析3. 厂商评估:微宏科技4. 入选证书 1.   研究范围定义近年来,随着外部市场环境快速变化、客户需求愈发多样,企业逐渐意识到,自身业务需要更加敏捷、高效,具备根据市场需求快速迭代的能力。业务流程的自动化能够帮助企业实现业务的敏捷高效,因此受到越来越多企业的关注。企业的“自动化武器库”品类丰富,包括低/零代码平台、RPA、BPM、AI等。企业可以使用多项自动化工具,但结果往往是各项自动化工具处于各自的“自动化烟囱”之中,仅能实现碎片式自动化。例如,某企业的IT团队可能在使用低代码平台、财务团队可能在使用RPA、呼叫中心则可能在使用聊天机器人。自动

  5. 连续3天3场分享,KubeVela@KubeCon EU 2023 抢鲜看! - 2

    自从2019年OpenApplicationModel诞生以来,KubeVela已经经历了几十个版本的变化,并向现代应用程序交付先进功能的方向不断发展。最近,KubeVela完成了向CNCF孵化项目的晋升,标志着社区的发展来到一个新的里程碑。今天,KubeVela社区内活跃着大量来自全球的开发者,共同推动KubeVela项目的落地和发展。在即将开幕的KubeCon+CloudNatvieConEurope2023上,我们惊喜地发现,连续3天,KubeVela项目的贡献者、企业用户和来自阿里云的核心维护者,将从不同角度展对KubeVela项目的分享。让我们先睹为快!🎙️BuildingaPlat

  6. 华为OD机试 -旋转骰子(Python) | 机试题算法思路 【2023】 - 2

    最近更新的博客华为OD机试-卡片组成的最大数字(Python)|机试题算法思路华为OD机试-网上商城优惠活动(一)(Python)|机试题算法思路华为OD机试-统计匹配的二元组个数(Python)|机试题算法思路华为OD机试-找到它(Python)|机试题算法思路华为OD机试-九宫格按键输入(Python)|机试算法备考思路华为OD机试-身高排序(Python)|备考思路使用说明参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。华为OD清单查看地址:blog.csdn.net/hihell/catego

  7. 2023年6月DAMA-CDGP数据治理专家认证请尽快报名啦! - 2

    目前6月DAMA-CDGP数据治理认证考试开放报名地区有:北京、上海、广州、深圳、长沙、呼和浩特。目前南京、济南、西安、杭州等地区还在接近开考人数中,打算参加6月考试的朋友们可以抓紧时间报名啦!!!5月初,DAMA-CDGA/CDGP数据治理认证考前班也即将开班啦!报名从速!!!DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业竞争能力。DAMA是数据管理方面的认证,帮助数据从业者提升数据管理能力。CDGP数据治理专家认证属于

  8. 绝对详细的 RabbitMQ 实践操作手册(一) - 2

    绝对详细的RabbitMQ实践操作手册,看完本系列就够了。一、什么是MQ?1、MQ的概念2、理解消息队列二、MQ的优势和劣势1、优势和作用2、劣势三、MQ的应用场景四、AMQP五、工作原理一、什么是MQ?1、MQ的概念MQ全称MessageQueue(消息队列),是在消息的传输过程中保存消息的容器。多用于系统之间的异步通信。下面用图来理解异步通信,并阐明与同步通信的区别。同步通信:甲乙两人面对面交流,你一句我一句必须同步进行,两人除此之外不做任何事情异步通信:异步通信相当于通过第三方转述对话,可能有消息的延迟,但不需要二人时刻保持联系,消息传给第三方后,两人可以做其他自己想做的事情,当需要获取

  9. 华为OD机试模拟题 用 C++ 实现 - 删除指定目录(2023.Q1) - 2

    最近更新的博客【华为OD机试模拟题】用C++实现-最多获得的短信条数(2023.Q1))文章目录最近更新的博客使用说明删除指定目录题目输入输出示例一输入输出说明Code使用说明参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。华为OD清单查看地址:https://blog.csdn.net/hihell/catego

  10. Internet Download Manager2023最好用的HTTP下载神器 - 2

    InternetDownloadManager介绍2023最佳下载利器。InternetDownloadManager(简称IDM)是一款Windows平台功能强大的多线程下载工具,国外非常受欢迎。支持断点续传,支持嗅探视频音频,接管所有浏览器,具有站点抓取、批量下载队列、计划任务下载,自动识别文件名、静默下载、网盘下载支持等功能。一款下载器软件,也可以叫它网页嗅探下载工具可以理解为和迅雷差不多,但是没有迅雷那么多广告,而且功能也更加强大(ps:我也是不久前知道迅雷可以下载网页的视频了)。这是一款互联网下载管理器,看着名字挺长的,但它还有一个简称,你一定知道:IDM,在很多论坛技术贴中被称为H

随机推荐