疯狂Spring Cloud连载(26)消息代理RabbitMQ框架

本文节选自《疯狂Spring Cloud微服务架构实战》

Spring Cloud教学视频:https://my.oschina.net/JavaLaw/blog/1552993

Spring Cloud电子书:https://my.oschina.net/JavaLaw/blog/1570383

 

消息代理RabbitMQ框架

        本小节将对RabbitMQ作一个简单的介绍,了解RabbitMQ的作用,掌握基本的概念即可。

消息代理中间件

        目前在市面上有许多消息代理中间件(下面简称为消息代理),例如ActiveMQ、RabbitMQ、Kafka等,在使用这些框架时,我们需要调用它们的API,用来发送、接收消息,大概的结构请见图8-1。

图8-1 消息代理

        消息代理主要用于接收和转发消息,可以把它看作邮局,消息生产者看作是寄件人,消息消费者是收件人,我们将一信件放到邮箱中,邮递员最终会把信件送达给收件人,RabbitMQ等框架,就是进行着邮箱、邮递员和邮局的工作,但它们处理的不是信件,而是“消息”。

        String Cloud Sream在生产者和消费者之间,加多了一个类似代理的角色,它直接与消息代理(邮局)进行交互,消息生产者(寄件人)与消息消费者(收件人)不再需要直接调用各个消息代理框架的API,它们甚至感觉不到消息代理的存在。类似于图8-2的结构。

图8-2 使用了Spring Cloud Stream后的结构

        使用了Stream框架后,消息的生产者和消费者可以更加专注于各自的业务,至于消息(信件)是如何投递,使用的是哪个消息代理(邮局),它们无须关心。

        目前,Spring Cloud Stream的绑定器,提供了RabbitMQ与Kafka两个消息代理中间件的实现,接下来,我们先简单了解下RabbitMQ与Kafka框架。

RabbitMQ和AMQP

        RabbitMQ是一个轻量级的消息代理中间件,它支持多种消息通信协议,支持分布式部署,同时也支持运行于多个操作系统,灵活、高可用等特性,使RabbitMQ广受欢迎。

        RabbitMQ支持多种协议,其中最为重要的,是高级消息队列协议(AMQP),AMQP是“Advanced Message Queuing Protocol”的缩写,它定义了“消息客户端”与“消息代理中间件”之间的通信协议。基于该协议,消息客户端与消息代理中间件,就可以不受开发语言、具体产品的约束。在学习使用RabbitMQ前,先对AMQP的模型作一个简单的了解。

        前一小节中,消息生产者会向消息代理投递消息,消息代理会再发送给消息消费者,现在对消息代理作进一步的细化,AMQP的大致模型,请见图8-3。

图8-3 AMQP模型

        在图8-3中,生产者会将消息投递给“消息代理(RabbitMQ服务器)”,它们之间会建立消息通道(Channel),消息由交换器(Exchange)先进行处理,交换器会选择把消息交给哪一个队列(Message Queue),最后消息队列会将消息发给消费者。接下来,先下载和运行RabbitMQ的服务器。

下载与运行

        本章所使用的RabbitMQ服务器版本为3.6.11(Windows),由于RabbitMQ服务器使用的是Erlang语言,因此还要下载Erlang,本章所使用的Erlang版本为20.0(64位),下载了Erlang后,会得到otp_win64_20.0.exe这样的安装文件,安装文件可以在本书的/soft目录中找到,笔者已经为大家下载了32位和64位的安装程序。

        如果在Windows 64位的系统中安装32位的Erlang,在使用RabbitMQ时会出现异常。

        依次安装完Erlang和RabbitMQ后,RabbitMQ会作为Windows服务启动。通过Windows命令行进入“C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.11\sbin”,输入:“rabbitmq-plugins list”查看当前RabbitMQ的插件状态,为了能使用RabbitMQ的控制台,输入“rabbitmq-plugins enable rabbitmq_management”开启管理插件,正常情况下会输出以下的信息:

Applying plugin configuration to rabbit@AY-PC... nothing to do.

        打开浏览器,访问以下地址:http://localhost:15672,可以看到RabbitMQ的登录界面,默认的用户名和密码均为“guest”,登录以后主界面如图8-4所示。

图8-4 RabbitMQ主界面

        此时,RabbitMQ的服务器已经成功运行,该服务器就是一个消息代理中间件。接下来,我们可以编写消息的生产者与消费者,使用RabbitMQ的API进行消息的测试。

本文节选自《疯狂Spring Cloud微服务架构实战》

Spring Cloud教学视频:https://my.oschina.net/JavaLaw/blog/1552993

Spring Cloud电子书:https://my.oschina.net/JavaLaw/blog/1570383

本书代码共享地址:https://gitee.com/yangenxiong/SpringCloud

注:本文转载自https://my.oschina.net/JavaLaw/blog/1585357,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除。


评论

赞助商