RabbitMQ

目录

1、RabbitMQ和Erlang下载(windows)

1.1Erlang安装

 1.2RabbitMQ安装

 1.3安装管理工具RabbitMQ-Plugins

2、MQ的基本概念

2.1MQ概述

2.2MQ优势和劣势

 2.3常见的mq产品

 2.4RabbitMQ简介

 2.5JMS

 3、RabbitMQ快速入门

3.1入门程序

4、RabbitMQ的工作模式

4.1Work queues工作队列模式

4.2Pub/Sub订阅模式

 4.3Routing路由模式

 4.4Topics通配符模式

 4.5工作模式总结

 5、Spring整合RabbitMQ

 6、SpringBoot整合RabbitMQ


1、RabbitMQ和Erlang下载(windows)

  1. 安装RabbitMQ之前必须先安装Erlang环境
  2. 安装前先参照rabbitmq官网给的RabbitMQ和Erlang版本对应关系下载对应版本的软件

RabbitMQ官网下载址:Installing on Windows — RabbitMQ
Erlang官网下载地址:Downloads - Erlang/OTP

1.1Erlang安装

点击下载好的.exe文件进行傻瓜式安装(一直next)即可
配置Erlang环境变量

RabbitMQ_第1张图片

 RabbitMQ_第2张图片

 打开命令窗口,输入erl验证环境是否配置成功(出现以下版本号即bingo,显示不是内部命令则环境变量配置成功)

RabbitMQ_第3张图片

 1.2RabbitMQ安装

和安装Erlang一样,点击exe文件进行安装配置环境变量

RabbitMQ_第4张图片

RabbitMQ_第5张图片

 1.3安装管理工具RabbitMQ-Plugins

进入sbin文件下,打开命令窗口输入

rabbitmq-plugins enable rabbitmq_management

RabbitMQ_第6张图片

 如果不是显示上图中的信息而是出现以下表示错误

Please either set ERLANG_HOME to point to your Erlang installation or place the
RabbitMQ server distribution in the Erlang lib folder

只要之前步骤都成功了,重启电脑,重新输入命令rabbitmq-plugins enable rabbitmq_management安装即可

安装好管理工具后输入rabbitmq-server.bat启动rabbitMQ

RabbitMQ_第7张图片

最后输入http://localhost:15672(默认账号:guest,密码:guest)就能进入RabbitMQ管理界面

RabbitMQ_第8张图片

2、MQ的基本概念

2.1MQ概述

  • MQ,消息队列,存储消息的中间件
  • 分布式系统通信两种方式:直接远程调用和借助第三方完成间接通信
  • 发送方称为生产者,接收方称为消费者

2.2MQ优势和劣势

RabbitMQ_第9张图片

 2.3常见的mq产品

RabbitMQ_第10张图片

 2.4RabbitMQ简介

AMQP,即Advanced Message Queuing Protocal(高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。2006年,AMQP规范发布。类比HTTP

RabbitMQ_第11张图片

2007年,Rabbit技术公司基于AMQP标准开发的RabbitMQ1.0发布。RabbitMQ采用Erlang语言开发。Erlang语言由Ericson设计,专门为开发高并发和分布式系统的一种语言,在电脑领域使用广泛。

RabbitMQ基础架构如下图:

RabbitMQ_第12张图片

 RabbitMQ_第13张图片

 RabbitMQ_第14张图片

 RabbitMQ_第15张图片

 2.5JMS

  • JMS即JAVA消费服务(JavaMwssage Service)应用程序接口,是一个java平台中关于面向消息中间件的API
  • JMS是JAVAEE规范中的一种,类比JDBC
  • 很多消息中间件都实现了JMS规范,例如:ActiveMQ。RabbitMQ官方没有提供JMS的实现包,但是开源社区有 

小结:

  1. RabbitMQ是基于AMQP协议使用Erlang语言开发的一款消息队列产品。
  2. RabbitMQ提供了6种工作模式,我们学习5种。
  3. AMQP是协议,类比HTTP。
  4. JMS是API规范接口,类比JDBC。

 3、RabbitMQ快速入门

3.1入门程序

需求:使用简单模式完成消息传递

步骤:

  1.  创建工程(生成者、消费者)
  2. 分别添加依赖
  3. 编写生产者发送消息
  4. 编写消费者消费消息

添加依赖:

RabbitMQ_第16张图片

生产者发送消息:

 RabbitMQ_第17张图片

RabbitMQ_第18张图片

 消费者消费消息:

RabbitMQ_第19张图片

RabbitMQ_第20张图片

4、RabbitMQ的工作模式

4.1Work queues工作队列模式

RabbitMQ_第21张图片

  •  Work Queues:与入门程序的简单模式相比,多了一个或一些消费端,多个消费端共同消费同一个队列中的消息。
  • 应用场景:对于任务过重或任务较多情况使用工作队列可以提高任务处理的速度。

小结:

  1. 在一个队列中如果有多个消费者,那么消费者之间对于同一个消息的关系是竞争的关系。
  2. Work Queues对于任务过重或任务较多情况使用工作队列可以提高任务处理的速度。例如:短信服务部署多个,只需要有一个节点成功发送即可。

4.2Pub/Sub订阅模式

RabbitMQ_第22张图片

在订阅模型中,多了一个Exchange角色,而且过程略有变化;

  •  P:生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发送给X(交换机)
  • C:消费者,消息的接收者,会一直等待消息到来
  • Queue:消息队列 ,接收消息,缓存消息
  • Exchange:交换机(X)。一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。到底如何操作,取决于Exchange的类型。Exchange有常见以下3种类型         

        1、Fanout:广播,将消息交给所有绑定到交换机的队列

         2、Direct:定向,把消息交给符合指定routing key 的队列

         3、Topic:通配符,把消息交给符合routing pattern(路由模式)的队列

   Exchange(交换机)只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与Exchange绑定,或者没有符合路由规则的队列,那么消息会丢失

Fanout生产者代码:

RabbitMQ_第23张图片

RabbitMQ_第24张图片

 RabbitMQ_第25张图片

 Fanout消费者代码:

RabbitMQ_第26张图片

 RabbitMQ_第27张图片

 4.3Routing路由模式

1、模式说明:

  • 队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey(路由key)
  • 消息的发送方在向Exchange发送消息时,也必须指定消息的RoutingKey
  • Exchange不再把消息交给每一个绑定的队列,而是根据消息的RoutingKey进行判断,只有队列的RoutingKey与消息的RoutingKey完全一致,才会接收到消息

RabbitMQ_第28张图片

 Direct生产者代码:

RabbitMQ_第29张图片

 RabbitMQ_第30张图片

  Direct消费者代码不变,只需修改两个消费者消费的队列名称即可。

 4.4Topics通配符模式

RabbitMQ_第31张图片

 Topic生产者代码:

RabbitMQ_第32张图片

RabbitMQ_第33张图片

 4.5工作模式总结

RabbitMQ_第34张图片

 5、Spring整合RabbitMQ

需求:使用Spring整合RabbitMQ

RabbitMQ_第35张图片

 生产者发送消息代码:

RabbitMQ_第36张图片

 RabbitMQ_第37张图片

 消费者接收消息代码:

RabbitMQ_第38张图片

 RabbitMQ_第39张图片

 6、SpringBoot整合RabbitMQ

RabbitMQ_第40张图片

 配置文件:RabbitMQ_第41张图片

 启动类:

RabbitMQ_第42张图片

 配置类:

RabbitMQ_第43张图片

 RabbitMQ_第44张图片

 消息发送:

RabbitMQ_第45张图片

 RabbitMQ_第46张图片

 yml配置文件:

RabbitMQ_第47张图片

 监听类:

RabbitMQ_第48张图片

 小结:

  • SpringBoot提供了快速整合RabbitMQ的方式
  • 基本信息在yml中配置,队列交互机以及绑定关系在配置类中使用Bean的方式配置
  • 生产端直接注入RabbitTemplate完成消息发送
  • 消息端直接使用@RabbitListener完成消息接收

你可能感兴趣的:(rabbitmq,中间件,分布式)