RabbitMQ

简介: RabbitMQ是一个开源的消息代理软件,基于AMQP协议,用于在分布式系统中传递消息,是一款高性能、可靠性强的消息队列中间件。RabbitMQ支持多种编程语言(如Java、Python、Ruby等)和多种操作系统(如Windows、Linux等),使用起来非常方便和灵活。

一.同步通讯

1.缺点:耦合度高、性能下降、浪费资源、级联失败

2.因为一个底层服务崩溃,最终导致整个集群不可用的情况,我们称之为:服务雪崩;这种只有微服务架构才会出现的问题

二.异步通讯

1.服务之间的调用要有一个Broker(订阅),只要哪个服务来订阅,一但有更新就知道

2.优点:降低耦合、提高性能、故障隔离

3.缺点:依赖Broker的可靠性、安全性、吞吐性;架构复杂了,没有明显的流线程,不好追踪管理

三.消息队列(MQ)

1.RabbitMQ(Rabbit公司)、ActiveMQ(Apache)、RocketMQ(阿里)、Kafka(Apache)

2.吞吐量比较大的用Kafka(收费的)、一般市面上用的最多的是RabbitMQ

四.RabbitMQ的环境搭建

1.先拉取rabbitMQ----》docker pull rabbitmq:3.8-management

2.安装-----》docker run \

-e RABBITMQ_DEFAULT_USER=itcast \

-e RABBITMQ_DEFAULT_PASS=123321 \

-v mq-plugins:/plugins \

--name mq \

--hostname mq \

-p 15672:15672 \

-p 5672:5672 \

-d \

rabbitmq:3-management

五.RabbitMQ快速入门

1.exchange只做消息的分发,不做消息的存储;路由消息到队列中

2.queue(队列):缓存消息

3.基本消息队列是直接到队列,不经过交换机;一对一

4.工作消息队列是直接到队列,不经过交换机;一对多

5.发布订阅分为三种:

1.广播(Fanout)----》经过exchange的分发

2.路由(Direct)----》有指定的关键词,指定要分发到哪个

3.主题(Topic)----》可以匹配多个带*

六.消息发送

1.创建通道

2.创建队列

3.发送消息

七.消息接收

1.创建通道

2.创建队列

3.发送消息

八.SpringAMQP

1.利用RabbitTemplate的convertAndSend方法来发送消息

2.基本消息队列

3.工作队列(一对多,防止消息挤压)

能者多劳

4.发布订阅【广播】(先发送给交换机,再路由给队列)

在消费方声明配置类。来声明交换机、队列、绑定关系

交换机返回的Bean是FanoutExchange、队列返回的Bean是Queue、绑定返回的Bean是Binding

5.路由

每个队列和交换机都设置一个BinDingKey

6.主题

#代表0个或多个单词,*代表一个单词


高级篇

一.消息的可靠性

1.发送时丢失:生产者发送的消息没有到交换机、消息到达交换机但没有到队列

2.MQ宕机了:队列将消息丢失

3.消费者接收到消息后未消费就宕机了

二.生产者消息确认

1.RabbitMQ提供了publisher confirm机制来避免消息发送到MQ过程丢失

2.publisher-confirm发送消息成功投递到交换机返回ack,否则返回nack

3.publisher-return消息投递到交换机了但是没有路由到队列,返回ACK,以及路由失败原因

4.配置文件

5.定义一个配置类实现ApplicationContextAware

6.从spring容器获取RabbitTemplate

7.设置returnCallback

8.发送消息体

9.添加confirm-callback函数

三.持久化

1.交换机持久化

2.队列持久化

四.消费者确认

1.manual(手动):

2.auto(自动):由spring监测listener代码是否出现异常,没有异常则返回ack,抛出异常返回nack

3.none(关闭):

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
21天前
|
消息中间件 存储 中间件
精通 RabbitMQ 系列 01
精通 RabbitMQ 系列 01
40 0
|
21天前
|
消息中间件 存储 负载均衡
什么是RabbitMQ?
RabbitMQ是一个开源的消息代理软件,用于在分布式系统中传递消息。它实现了高级消息队列协议(AMQP),提供了一种可靠的、强大的、灵活的消息传递机制,使得不同应用程序或组件之间可以轻松地进行通信。
30 0
|
21天前
|
消息中间件 Java 中间件
一、RabbitMQ介绍
一、RabbitMQ介绍
50 0
|
8月前
|
消息中间件 存储 数据库
RabbitMQ特殊应用
RabbitMQ特殊应用
38 0
|
11月前
|
消息中间件
1. 什么是 RabbitMQ?
1. 什么是 RabbitMQ?
46 0
|
11月前
|
消息中间件 存储 网络协议
rabbitmq的介绍
rabbitMQ是一个开源的AMQP实现的消息队列中间件,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、C、 用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不错,与SpringAMQP完美的整合、API丰富易用。
|
11月前
|
消息中间件 存储 缓存
RabbitMQ到底为什么要使用它?
在多服务体系架构中,必然存在着多个服务之间的调用关系,当用户提交了订单,订单服务会调用支付服务执行用户的金钱操作,执行完毕之后紧接着调用商品服务对商家的商品信息(库存、成交量、收入等)进行更新,执行完毕之后又调用物流服务
|
12月前
|
消息中间件 网络协议 Java
RabbitMQ(3)
RabbitMQ(3)
|
12月前
|
消息中间件 Java
RabbitMQ(2)
RabbitMQ(2)
|
消息中间件 存储 NoSQL
RabbitMQ(二)
RabbitMQ(二)
221 0
RabbitMQ(二)

相关实验场景

更多