RabbitMQ消息中间件

常规订单系统

RabbitMQ消息中间件_第1张图片

使用消息中间件的订单系统

RabbitMQ消息中间件_第2张图片

常规秒杀系统设计

RabbitMQ消息中间件_第3张图片

消息中间件典型场景

1.异步处理

2.应用解耦

3.流量削锋

4.消息通讯 

RabbitMQ消息中间件_第4张图片

RabbitMQ消息中间件介绍

Rabbit科技有限公司开发了RabbitMQ,并提供对其的支持。起初,Rabbit科技是LSHIFT和CohesiveFT在2007年成立的合资企业,2010年4月被VMware旗下的SpringSource收购。RabbitMQ在2013年5月成为GoPivotal的一部分。

RabbitMQ消息中间件_第5张图片

RabbitMQ重点特性

1.灵活的路由(Flexible Routing)

在消息进入队列之前,通过 Exchange 来路由消息的。对于典型的路由功能,RabbitMQ 已经提供了一些内置的 Exchange 来实现。针对更复杂的路由功能,可以将多个 Exchange 绑定在一起,也通过插件机制实现自己的 Exchange 。

2.多语言客户端(Many Clients)

RabbitMQ 几乎支持所有常用语言,比如 Java、.NET、Ruby 等等。

3.管理界面(Management UI)

RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker 的许多方面。

4.插件机制(Plugin System) RabbitMQ 提供了许多插件,来从多方面进行扩展,也可以编写自己的插件。

RabbitMQ安装

安装docker(略)

拉取RabbitMQ镜像 :docker pull rabbitmq

启动RabbitMQ容器: docker run -i -t -d -p 5672:5672 -p 15672:15672 rabbitmq

启动RabbitMQ的web端插件 :docker exec -i -t 55 /bin/bash rabbitmq-plugins enable rabbitmq_management

RabbitMQ名词解释

1.Server(broker): 服务器,接受客户端连接,实现AMQP消息队列和路由功能的进程。 

2.Virtual Host:虚拟主机, 类似于权限控制组。

3.Connection:物理连接,对于RabbitMQ而言,其实就是一个位于客户端和Broker之间的TCP连接。

4.Channel:信道,仅仅创建了客户端到Broker之间的连接后,客户端还是不能发送消息的。需要为每一个Connection创建Channel,AMQP协议规定只有通过Channel才能执行AMQP的命令。

5.Exchange:路由,接受生产者发送的消息,并根据Binding规则将消息路由给服务器中的队列。

6.Message Queue:消息队列,用于存储还未被消费者消费的消息。

7.Binding:绑定关系,Binding联系了Exchange与Message Queue。

8.Message: 消息体,由Header和Body组成,Header是由生产者添加的各种属性的集合。而Body是真正需要传输的APP数据。

 RabbitMQ消息队列模式之简单模式:一个生产者P发送消息到队列Q,一个消费者C接收

RabbitMQ消息中间件_第6张图片

RabbitMQ消息队列模式之工作模式:一个生产者,多个消费者,每个消费者获取到的消息唯一,多个消费者只有一个队列

RabbitMQ消息中间件_第7张图片

RabbitMQ消息队列模式之发布/订阅模式

一个生产者发送的消息会被多个消费者获取。一个生产者、一个交换机、多个队列、多个消费者 生产者:可以将消息发送到队列或者是交换机。 消费者:只能从队列中获取消息。 如果消息发送到没有队列绑定的交换机上,那么消息将丢失。 交换机不能存储消息,消息存储在队列中

RabbitMQ消息中间件_第8张图片

RabbitMQ消息队列模式之通配符模式

上面的路由模式是根据路由key进行完整的匹配(完全相等才发送消息),这里的通配符模式通俗的来讲就是模糊匹配。 符号“#”表示匹配一个或多个词,符号“*”表示匹配一个词。

RabbitMQ消息中间件_第9张图片

RabbitMQ例子-pom文件

RabbitMQ消息中间件_第10张图片

RabbitMQ例子-连接工厂

RabbitMQ消息中间件_第11张图片

RabbitMQ例子-简单模式-生产者

RabbitMQ消息中间件_第12张图片

RabbitMQ例子-简单模式-消费者

RabbitMQ消息中间件_第13张图片

RabbitMQ例子-工作模式-生产者

RabbitMQ消息中间件_第14张图片

RabbitMQ例子-工作模式-消费者

RabbitMQ消息中间件_第15张图片

RabbitMQ例子-消息签收:

为了确保消息不会丢失,RabbitMQ支持消息签收。消费者发送一个消息签收,告诉RabbitMQ这个消息已经接收并且处理完毕了。RabbitMQ就可以删除它了。

如果一个消费者挂掉却没有发送签收,RabbitMQ会理解为这个消息没有处理完全,然后交给另一个消费者去重新处理。这样,你就可以确认即使消费者偶尔挂掉也不会丢失任何消息了。

自动签收: 不在乎消费者对消息处理是否成功,都会告诉队列删除消息。

手动签收: 消费者处理完业务逻辑,手动返回ack(通知)告诉队列处理完了,队列进而删除。

RabbitMQ流量销峰思路一 设置队列消息长度:

RabbitMQ有两种对队列长度的限制方式: 对队列中消息的条数进行限制  x-max-length 对队列中消息的总量进行限制  x-max-length-bytes 对消息总条数进行限制(总条数包括未被消费的消息+被消费但未被确认的消息):

RabbitMQ流量销峰思路二 扫描消息队列长度

RabbitMQ给我们提供了获取指定消息队列中剩余消息数的方法,我们可以通该方法对消息队列进行监控; channel.messageCount("tx_queue");

RabbitMQ消息中间件_第16张图片

 

根据本人多年从业以及学习经验,录制了一套最新的Java精讲视频教程,如果你现在也在学习Java,在入门学习Java的过程当中缺乏系统的学习教程,你可以加群654631948领取下学习资料,面试题,开发工具等,群里有资深java老师做答疑,每天也会有基础部分及架构的直播课,也可以加我的微信renlliang2013做深入沟通,只要是真心想学习Java的人都欢迎。

java基础教程:https://ke.qq.com/course/149432?tuin=57912c43


Java分布式互联网架构/微服务/高性能/springboot/springcloud:

https://ke.qq.com/course/179440?tuin=57912c43

你可能感兴趣的:(视频教程,免费视频教程)