本文节选自《疯狂Spring Cloud微服务架构实战》
京东购买地址::https://item.jd.com/12256011.html
当当网购买地址::http://product.dangdang.com/25201393.html
Spring Cloud教学视频:http://blog.csdn.net/boxiong86/article/details/78399104
Spring Cloud电子书:http://blog.csdn.net/boxiong86/article/details/78488226
消息代理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位的安装程序。
如果在Windows64位的系统中安装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教学视频:http://blog.csdn.net/boxiong86/article/details/78399104
Spring Cloud电子书:http://blog.csdn.net/boxiong86/article/details/78488226
本书代码共享地址:https://gitee.com/yangenxiong/SpringCloud