RabbitMQ是目前很是热门的一款消息中间件,不论是互联网大厂仍是中小企业都在大量使用。做为一名合格的开发者,有必要对RabbitMQ有所了解,本文是RabbitMQ快速入门文章,主要内容包括RabbitMQ是什么、RabbitMQ核心概念、经常使用交换器类型、用Docker安装RabbitMQ等。html
以熟悉的电商场景为例,若是商品服务和订单服务是两个不一样的微服务,在下单的过程当中订单服务须要调用商品服务进行扣库存操做。按照传统的方式,下单过程要等到调用完毕以后才能返回下单成功,若是网络产生波动等缘由使得商品服务扣库存延迟或者失败,会带来较差的用户体验,若是在高并发的场景下,这样的处理显然是不合适的,那怎么进行优化呢?这就须要消息队列登场了。docker
消息队列提供一个异步通讯机制,消息的发送者没必要一直等待到消息被成功处理才返回,而是当即返回。消息中间件负责处理网络通讯,若是网络链接不可用,消息被暂存于队列当中,当网络畅通的时候在将消息转发给相应的应用程序或者服务,固然前提是这些服务订阅了该队列。若是在商品服务和订单服务之间使用消息中间件,既能够提升并发量,又下降服务之间的耦合度。浏览器
RabbitMQ就是这样一款咱们苦苦追寻的消息队列。RabbitMQ是一个开源的消息代理的队列服务器,用来经过普通协议在彻底不一样的应用之间共享数据。安全
RabbitMQ是使用Erlang语言来编写的,而且RabbitMQ是基于AMQP协议的。Erlang语言在数据交互方面性能优秀,有着和原生Socket同样的延迟,这也是RabbitMQ高性能的缘由所在。可谓“人如其名”,RabbitMQ像兔子同样迅速。服务器
RabbitMQ除了像兔子同样跑的很快之外,还有这些特色:网络
MQ典型应用场景:并发
提到RabbitMQ,就不得不提AMQP协议。AMQP协议是具备现代特征的二进制协议。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。异步
先了解一下AMQP协议中间的几个重要概念:微服务
咱们彻底能够直接使用 Connection 就能完成信道的工做,为何还要引入信道呢?高并发
试想这样一个场景, 一个应用程序中有不少个线程须要从 RabbitMQ 中消费消息,或者生产消息,那么必然须要创建不少个 Connection,也就是许多个 TCP 链接。然而对于操做系统而言,创建和销毁 TCP 链接是很是昂贵的开销,若是遇到使用高峰,性能瓶颈也随之显现。 RabbitMQ 采用 TCP 链接复用的方式,不只能够减小性能开销,同时也便于管理 。
下图是AMQP的协议模型:
正如图中所看到的,AMQP协议模型有三部分组成:生产者、消费者和服务端。
生产者是投递消息的一方,首先链接到Server,创建一个链接,开启一个信道;而后生产者声明交换器和队列,设置相关属性,并经过路由键将交换器和队列进行绑定。同理,消费者也须要进行创建链接,开启信道等操做,便于接收消息。
接着生产者就能够发送消息,发送到服务端中的虚拟主机,虚拟主机中的交换器根据路由键选择路由规则,而后发送到不一样的消息队列中,这样订阅了消息队列的消费者就能够获取到消息,进行消费。
最后还要关闭信道和链接。
RabbitMQ是基于AMQP协议实现的,其结构以下图所示,和AMQP协议简直就是如出一辙。
RabbitMQ经常使用的交换器类型有direct、topic、fanout、headers四种。
Direct Exchange
该类型的交换器将全部发送到该交换器的消息被转发到RoutingKey指定的队列中,也就是说路由到BindingKey和RoutingKey彻底匹配的队列中。
Topic Exchange
该类型的交换器将全部发送到Topic Exchange的消息被转发到全部RoutingKey中指定的Topic的队列上面。
Exchange将RoutingKey和某Topic进行模糊匹配,其中“”用来匹配一个词,“#”用于匹配一个或者多个词。例如“com.#”能匹配到“com.rabbitmq.oa”和“com.rabbitmq”;而"login."只能匹配到“com.rabbitmq”。
Fanout Exchange
该类型不处理路由键,会把全部发送到交换器的消息路由到全部绑定的队列中。优势是转发消息最快,性能最好。
Headers Exchange
该类型的交换器不依赖路由规则来路由消息,而是根据消息内容中的headers属性进行匹配。headers类型交换器性能差,在实际中并不经常使用。
在云计算和容器技术大热的今天,不会Docker显得未免太out了吧。Docker提供一种安全、可重复的环境中自动部署软件的方式,本文使用Docker进行安装RabbitMQ。
我选择3.8.0-beta.4-management进行安装,带有management是含有管理界面的。
拉取镜像和启动:docker run -d --hostname my-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3.8.0-beta.4-management
查看镜像:
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/rabbitmq 3.8.0-beta.4-management d0f93d2b83f7 3 days ago 180 MB
打开浏览器访问localhost:15672,若是你和我同样装在虚拟机上面的话,须要打开虚拟机ip:15672
进行填写帐号密码:默认帐号密码都是guest.
到此,RabbitMQ已经安装并运行起来了。
本文介绍了RabbitMQ是什么、RabbitMQ核心概念、经常使用交换器类型、用Docker安装RabbitMQ等内容,看完本文,想必对于RabbitMQ已经有了一些初步的了解了,后面的世界更精彩。
本文参考慕课网免费课程:《RabbitMQ消息中间件极速入门与实战》。
原文出处:https://www.cnblogs.com/sgh1023/p/11217017.html