学会RabbitMQ,看懂这篇文章就够了。

【RabbitMQ】什么是RabbitMQ?RabbitMQ有什么用?应用场景有那些? RabbitMQ简称MQ是一套实现了高级消息队列协议的开源消息代理软件,简单来说就是一个消息中间件。是一种程序对程序的通信方法。 阅读详情

RabbitMQ 研究

1、什么是MQ以及为什么学习RabbitMQ
1.1简介

MQ全称为MessageQueue,即消息队列,RabbitMQ是由erlang语言开发,基于AMQP(AdvancedMessage Queue高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。RabbitMQ官方地址:http://www.rabbitmq.com/

开发中消息队列通常有如下应用场景:

1、任务异步处理。
将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高了应用程序的响应时间。

2、应用程序解耦合
MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程序进行解耦合。

市场上还有哪些消息队列?
ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ(阿里产品)、Redis。

为什么使用RabbitMQ呢?
1、使用简单,功能强大。
2、基于AMQP协议。
3、高并发性能好,这主要得益于Erlang语言。
4、SpringBoot默认已集成RabbitMQ

2、快速入门
2.1RabbitMQ的工作原理

在这里插入图片描述
组成部分说明如下:
Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue。
Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。
Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的消费方。
Producer:消息生产者,即生产方客户端,生产方客户端将消息发送到MQ。
Consumer:消息消费者,即消费方客户端,接收MQ转发的消息。

消息发布接收流程:
-----发送消息-----
1、生产者和Broker建立TCP连接。
2、生产者和Broker建立通道。
3、生产者通过通道把消息发送给Broker,由Exchange将消息进行转发。
4、Exchange将消息转发到指定的Queue(队列)

----接收消息-----
1、消费者和Broker建立TCP连接
2、消费者和Broker建立通道
3、消费者监听指定的Queue(队列)
4、当有消息到达Queue时Broker默认将消息推送给消费者。
5、消费者接收到消息。

2.2 下载安装

RabbitMQ由Erlang语言开发,而OTP(Open TelecomPlatform)作为Erlang语言的一部分,包含了很多基于Erlang开发的中间件及工具库,安装RabbitMQ需要安装Erlang/OTP,并保持版本匹配,如下:
1)下载erlang :地址如下:http://erlang.org/download/otp_win64_20.3.exe
安装完成后,将Erlang添加到环境变量中。
erlang安装完成需要配置erlang环境变量: ERLANG_HOME=D:\Program Files\erl9.3 在path中加%ERLANG_HOME%\bin;

2)安装RabbitMQ :https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.7.3
安装成功之后,安装rabbitMQ的管理插件,方便在浏览器端管理RabbitMQ ,打开命令行cd,输入RabbitMQ的sbin目录。我的目录是:D:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.3\sbin,然后在后面输入rabbitmq-plugins enable rabbitmq_management 命令进行安装。
打开浏览器输入:http://localhost:15672,看到如下界面表示安装成功:
在这里插入图片描述
初始用户名和密码都是guest,登录即可。

3、工作模式
3.1、Work queues


应用场景:对于任务过重或任务较多情况使用工作队列可以提高任务处理的速度。
结果:
1、一条消息只会被一个消费者接收;
2、rabbit采用轮询的方式将消息是平均发送给消费者的;
3、消费者在处理完某条消息后,才会收到下一条消息。

3.2、Publish/Subscribe

在这里插入图片描述
发布订阅模式:
1、每个消费者监听自己的队列。
2、生产者将消息发给broker,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将接收到消息
应用场景:用户通知,当用户充值成功或转账完成系统通知用户,通知方式有短信、邮件多种方法。

3.3、Routing

在这里插入图片描述
路由模式:
1、每个消费者监听自己的队列,并且设置routingkey。
2、生产者将消息发给交换机,由交换机根据routingkey来转发消息到指定的队列

3.4、Topics

在这里插入图片描述
通配符模式:
1、每个消费者监听自己的队列,并且设置带统配符的routingkey。
2、生产者将消息发给broker,由交换机根据routingkey来转发消息到指定的队列

4、SpringBoot整合RabbitMQ
4.1、搭建SpringBoot环境

我们选择基于Spring-Rabbit去操作RabbitMQ
https://github.com/spring-projects/spring-amqp
使用spring-boot-starter-amqp会自动添加spring-rabbit依赖,如下:

 <dependency>
     <groupId>org.springframework.boot</groupId>
    <artifactId>spring‐boot‐starter‐amqp</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring‐boot‐starter‐test</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring‐boot‐starter‐logging</artifactId>
 </dependency>
4.2、配置

1、配置application.yml 配置连接rabbitmq的参数

server:
  port: 44000 
spring:
  application:
    name: test‐rabbitmq‐producer   rabbitmq:
    host: 127.0.0.1 
    port: 5672 
    username: guest 
    password: guest 
    virtualHost: /

2、定义RabbitConfig类,配置Exchange、Queue、及绑定交换机。本例配置Topic交换机。

@Configuration 
public class RabbitmqConfig {
    public static final String QUEUE_INFORM_EMAIL = "queue_inform_email";
    public static final String QUEUE_INFORM_SMS = "queue_inform_sms";
    public static final String EXCHANGE_TOPICS_INFORM="exchange_topics_inform";
 
 
    /**
     * 交换机配置 
     * ExchangeBuilder提供了fanout、direct、topic、header交换机类型的配置 
     * @return the exchange 
     */
    @Bean(EXCHANGE_TOPICS_INFORM)
    public Exchange EXCHANGE_TOPICS_INFORM() {
        //durable(true)持久化,消息队列重启后交换机仍然存在
        return ExchangeBuilder.topicExchange(EXCHANGE_TOPICS_INFORM).durable(true).build();    }
    //声明队列
    @Bean(QUEUE_INFORM_SMS)
    public Queue QUEUE_INFORM_SMS() {
        Queue queue = new Queue(QUEUE_INFORM_SMS);
        return queue;
    }
    //声明队列
    @Bean(QUEUE_INFORM_EMAIL)
    public Queue QUEUE_INFORM_EMAIL() {
        Queue queue = new Queue(QUEUE_INFORM_EMAIL);
        return queue;
    }
    /** channel.queueBind(INFORM_QUEUE_SMS,"inform_exchange_topic","inform.#.sms.#");
     * 绑定队列到交换机 .
     *
     * @param queue    the queue 
     * @param exchange the exchange 
     * @return the binding 
     */
    @Bean 
    public Binding BINDING_QUEUE_INFORM_SMS(@Qualifier(QUEUE_INFORM_SMS) Queue queue, 
@Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with("inform.#.sms.#").noargs();
    }
    @Bean 
    public Binding BINDING_QUEUE_INFORM_EMAIL(@Qualifier(QUEUE_INFORM_EMAIL) Queue queue, 
@Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with("inform.#.email.#").noargs();
    }
}
4.3、生产端

使用RarbbitTemplate发送消息

@SpringBootTest 
@RunWith(SpringRunner.class)
public class Producer05_topics_springboot {
   @Autowired 
    RabbitTemplate rabbitTemplate;
 
    @Test 
    public void testSendByTopics(){
        for (int i=0;i<5;i++){
            String message = "sms email inform to user"+i;
			rabbitTemplate.convertAndSend(RabbitmqConfig.EXCHANGE_TOPICS_INFORM,"inform.sms.email",message); 
            System.out.println("Send Message is:'" + message + "'");
        }
    }
}
4.4、消费端

创建消费端工程,添加依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring‐boot‐starter‐amqp</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring‐boot‐starter‐test</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring‐boot‐starter‐logging</artifactId>
 </dependency>

使用@RabbitListener注解监听队列。

@Component 
public class ReceiveHandler {
 
    //监听email队列
    @RabbitListener(queues = {RabbitmqConfig.QUEUE_INFORM_EMAIL})
    public void receive_email(String msg,Message message,Channel channel){        System.out.println(msg);
    }
 
    //监听sms队列
    @RabbitListener(queues = {RabbitmqConfig.QUEUE_INFORM_SMS})
    public void receive_sms(String msg,Message message,Channel channel){
        System.out.println(msg);
    }
}

本文全部测试代码都已上传至github,链接地址:https://github.com/wangsheng035/RabbitMQ.git

大牛总结超详细的RabbitMQ入门,看这篇文章就够了! 上篇文章我们初步介绍了之前制定的那些消息中间件数据不丢失的技术方案遗留的问题。 本文会深入的分析一下消费者手动ack机制保证消息不丢失的底层原理。 阅读详情

相关推荐

Springboot 整合RabbitMq ,用心看完这一篇就够了

该篇文章内容较多,包括有rabbitMq相关的一些简单理论介绍,provider消息推送实例,consumer消息消费实例,Direct、Topic、Fanout的使用,消息回调、手动确认等。 (但是关于rabbitMq的安装,就不介绍了) 在安装完rabbitMq后,输入http://ip:15672/,是可以看到一个简单后台管理界面的。 在这个界面里面我们可以做些什么? 可以手动创建............

默默不代表沉默 50万+

超详细的RabbitMQ入门,看这篇就够了!

消息指的是两个应用间传递的数据。数据的类型有很多种形式,可能只包含文本字符串,也可能包含嵌入对象。“消息队列(Message Queue)”是在消息的传输过程中保存消息的容器。在消息队列中,通常有生产者和消费者两个角色。生产者只负责发送数据到消息队列,谁从消息队列中取出数据处理,他不管。消费者只负责从消息队列中取出数据处理,他不管这是谁发送的数据。 主要有三个作用:解耦。如图所示。假设有系统B、C、D都需要系统A的数据,于是系统A调用三个方法发送数据到B、C、D。这时,系统D不需要了,那就需要在系统A把相关

诗和远方,代码和你 856

别再手动巡检了!用Zabbix 5.0 + SNMPv2自动监控华为S系列交换机(附完整命令集)

本文详细介绍了如何利用Zabbix 5.0与SNMPv2实现华为S系列交换机的自动化监控,告别低效的手动巡检。通过配置SNMPv2c安全基线、核心功能启用及Zabbix Server端深度配置,构建7×24小时监控体系,实时预警接口状态、流量波动等关键指标,大幅提升运维效率与故障响应速度。

weixin_30940783的博客 629

RabbitMQ【#1】是什么,有什么用

例如,一个应用程序可以将任务放入RabbitMQ队列中,而另一个应用程序可以从队列中取出这些任务并执行它们。例如,当某个事件发生时,一个应用程序可以将消息发送到RabbitMQ队列,而其他应用程序可以订阅这些消息以接收通知。任务可以被发送到RabbitMQ队列中,并设置一个延迟时间,当该延迟时间到达时,任务将被取出并执行。总的来说,RabbitMQ是一种非常有用的工具,它可以在分布式系统中实现异步通信、负载均衡、事件通知等功能,提高了系统的可靠性和可扩展性。:RabbitMQ可以用于处理日志消息。

暴躁的菜鸡的博客 754

VulnHub--mrrobot

Vulnhub靶场--Mr robot 靶机

记录笔记 1097

Linux ARM平台开发系列讲解(GMSL摄像头篇)1.2 MAX9296 GMSL链路配置

串行器 +解串器组成,软件需要做的就是写这三部分的驱动,让摄像头数据能到达。3. 配置解串器和串行器的GMSL链路。串行器和解串器上电成功之后,就可以配置。软件配置(注意软件只可以配置速率,2. 9296上电,使能芯片。的版本和速率,比如版本是配置。配置成功之后,就会出现串行器。的链路,其它同类型的。设备地址,我设置的是。...

DSMGUOGUO的博客 1万+

普歌-浅谈RabbitMQ

mq简介 常见mq RabbitMQ用途 消息模型

weixin_52309367的博客 1211

PCL 基于超体素的点云分割【2024最新版】

点云超体素分割原理介绍、代码实现以及如何做到将每一个超体素内的点进行单独保存而不造成点云缺失的方法。博客长期更新,本文最近一次更新时间为:2024年12月29日。

点云侠的博客 36万+

学会Rabbitmq,这一篇就够了

RabbitMQ学习笔记 Docker安装 一、获取镜像 # 镜像未配有控制台 docker pull rabbitmq # 镜像配有控制台 docker pull rabbitmq:management 二、运行镜像 #方式一:默认guest 用户,密码也是 guest docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:management #方式二:设置用户名和密码 docker

南风的博客 7263

心理学量表汇总 50多个 附下载

目录一、心理健康与精神病态量表二、行为问题量表三、人格评估量表四、智力测验一、心理健康与精神病态量表1.一般症状自评量表(SCL-90)症状自评量表 (The self-report symptom inventory ,Symptom checklist ,90,简称 SCL90) 有 90 个评定项目 , 每个项目分五级评分 , 包含了比较广泛的精神病症状学内容, 从感觉、 情 感、思维、意识、行为直至生活习惯、人际关系、饮食等均有涉及,能准确刻划被试的自觉 症状,能较好地反映被试的问题及其严重程度和变

南七小僧的学海无涯 1904

【ESP32设备通信】-LoRa通信

在本文中,我们将使用 Arduino IDE 将 ESP32 与 LoRa SX1278 (Ra-02) 模块连接起来。 我们将创建一个真实的示例项目,通过 LoRa 无线打开/关闭 LED 进行演示。

视觉与物联智能 1890

学会RabbitMQ这一篇就够了

文章目录基础篇简单代码-生存者消费者Work Queue 工作队列Pub/Sub 订阅模式Fanout 广播Direct 路由方式Topic 通配符SpringBoot整合Demo高级篇1、消息的可靠性投递confirmCallback 确认发布ReturnCallback 回退模式Ack 消费者确认模式MessageRecoverer捕捉异常死信队列 基础篇 简单代码-生存者消费者 Maven <dependencies> <!--rabbitmq 依赖客户端--

yiqiu1959的博客 2300

如何使用Python爬取并保存网页上的所有附件

爬虫(Crawler)是一种自动化程序,它通过模拟人工访问网页并下载网页上的数据或文件,常用于数据采集和分析。爬虫通常以“爬取”的形式自动浏览和提取网页中的各种信息。本文详细介绍了如何使用Python爬取并保存网页中的附件文件,涵盖了网页解析、文件下载、多线程与异步优化等内容。希望通过本文的讲解,能够帮助你理解并掌握附件爬取的技巧。在实际应用中,爬虫开发不仅需要解决技术问题,还要遵守网络道德和法律法规,避免不当使用爬虫造成负面影响。

2201_76125261的博客 967

RabbitMQ消息队列,看这篇文章就够了

前言 关于消息队列,笔者依稀记得多年前刚毕业实习的时候,由于业务上的需要,有过一段时间的研究,那时候研究的目的是要引入一个更好的消息队列中间件来解决公司门店数据与总部机房数据通讯的问题,只可惜那时候笔者经验尚浅,并没有对消息队列有更深入的理解。 不过出于开发的需要,最近又开始消息队列的学习,并将学习笔记整理成这篇文章,以备查验。 什么是队列 队列(Queue)是一种常见的数据结构,其最大的特性就是先进先出(Firist In First Out),作为最基础的数据结构,队列应用很广泛,比如我们熟知的Redi

alpha_love的博客 1060

open3d将某一时间序列下的彩色图和深度图批量转换成点云(python)

必备条件需要3D相机生成的彩色图及深度图,注意要将深度图与彩色图对齐(一般3D相机自带对齐算子),以及3D相机的彩色图内参(相机自带内参获取功能)。有了此彩色图、对齐后的深度图以及相机内参就能使用open3d生成彩色点云了.

吾名招财的博客 315

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

入门RabbitMQ消息队列,看这篇文章就够了

目录 前言 什么是队列 什么是消息队列 什么是RabbitMQ 消息队列的应用场景 消息通讯 异步处理 服务解耦 流量削峰 RabbitMQ安装与启动 在Cnetos7上的安装 安装 安装-detached为可选参数,表示后台开启 Docker上的安装 启动镜像 核心概念 Broker Producer与Con...

dream317 874

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

超详细的RabbitMQ入门,看这篇就够了

什么的消息队列?为什么使用消息队列?如何使用RabbitMQ?看这篇就够了

yehongzhi1994的博客 6204

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

超详细的RabbitMQ入门与实战介绍,看这篇文章就够了!

上一篇文章我们已经给出了一整套的数据一致性的保障方案。 本文我们将从三个角度,给出方案如何实现,并且通过数据平台和电商系统进行了举例分析。

石杉的架构笔记 2382

Docker快速部署RabbitMq教程,这一篇就够了!

要快速部署RabbitMQ,可以使用Docker容器来简化过程。下面是使用Docker快速部署RabbitMQ的教程。

胜人者有力,自胜者强! 1万+

RabbitMQ入门到实战一篇文章就够了

MQ全称为Message Queue,即消息队列. 它也是一个队列,遵循FIFO原则 。RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue Protocol高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开 发中应用非常广泛。官方地址:http://www.rabbitmq.com/

墨家巨子@俏如来 2万+

RabbitMQ一篇就够了

RabbitMQRabbitMQ简介同步调用与异步调用同步调用异步调用什么是MQRabbitMQ快速入门RabbitMQ概述常见消息模型入门案例总结: RabbitMQ简介 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。 遵循协议-AMQP: AMQP(Advanced Message Queuing Proto

m0_54349490的博客 1378

RabbitMQ最全使用教程-小白也能看懂

RabbitMq最全使用教程: 1、消息中间件是什么? 2、常见的消息中间件有哪些? 3、使用它有什么作用? 4、RabbitMQ中核心的内容有那些,如何使用它们? 5、Spring如何整合RabbitMQ? 6、如何通过代码操作RabbitMQ?

3490

php 安装rabbitmq拓展_入门RabbitMQ消息队列,看这篇文章就够了

2020年后想跳槽?MQ、ZK、Nginx、Kafk等分布式技术你都掌握了?消息队列面试,你能顶得住面试官这波10大连环炮的攻势吗?金三即逝,连这份“Java春招手册”都没刷过,你拿什么备战银四?前言关于消息队列,笔者依稀记得多年前刚毕业实习的时候,由于业务上的需要,有过一段时间的研究,那时候研究的目的是要引入一个更好的消息队列中间件来解决公司门店数据与总部机房数据通讯的问题,只可惜那时候笔者经验...

weixin_29818013的博客 164

【外行也能看懂的RabbitMQ系列(一)】—— RabbitMQ快速入门篇(内含丰富实例)

恭喜所有看到本篇文章的小伙伴,成功解锁了RabbitMQ系列之快速入门的内容????通过本文,你将快速了解到什么是中间件?什么是RabbitMQ?RabbitMQ是如何让工作的?最后小名将带大家通过一个实例来加深你对RabbitMQ的印象????文章有些长,请大家耐心食用????

小名同学 27万+
下一篇: 多线程卖票复习传统版一
Wang Sheng
博客等级 码龄9年 4粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值