RabbitMQ介绍&Docker安装

MQ介绍

MQ概念

MQ: Message Queue,译为消息队列,本质是个队列,具有先进先出特性,应存放的是消息,因此对其称呼为消息队列。

MQ作用

解耦利器

借助MQ,将多个服务彼此隔离,服务间只清楚MQ的存在,而不需要知道彼此的存在。

异步

如抢购场景,同步请求时,需要完成订单,减库存,付款一系列操作,实时性要求强,技术要求也更高,而在异步请求下,下了订单后,立马将请求返回,等待查询处理结果,当MQ另一侧的服务处理完毕后,才会知晓是否购买成功。此时对于下订单这块的服务,异步下可大幅提高可用性。

削峰/限流

继续考虑如上场景,当抢购量大时,存放在MQ内的消息众多,而处理消息的服务可以依据自身机器性能,程序性能去处理符合自身处理能力的消息数量,如同步场景下,可能出现的局面是将洪水引入小沟渠。

MQ局限

当上游服务需实时关注执行结果时,使用MQ反而不利,借助MQ更多的是完成时间换空间的活。

常见应用案例

  • 注册时发送邮件或发送短信
  • 日志分析使用,多个服务产生的数据发送到中间件发送到分析服务。
  • 消息复制,用于跨机房数据传输、搜索、离线数据计算等。
  • 延迟消息发送和暂存,把中间件当成可靠的消息暂存地。接受消息,暂时先不发送。

常见MQ中间件

比较流行的有 RabbitMQ、ActiveMQ、ZeroMQ、kafka,阿里开源的RocketMQ,微软的Service Bus等。

RabbitMQ介绍

RabbitMQ

RabbitMQ 是实现 AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 RabbitMQ 主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层。保存这个数据。

AMQP协议

AMQP,即 Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP 的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。

RabbitMQ特点

RabbitMQ 是一个开源的 AMQP 实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP 等,支持 AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

具体特点包括:

  1. 可靠性(Reliability)
    RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认、发布确认。
  2. 灵活的路由(Flexible Routing)
    在消息进入队列之前,通过 Exchange 来路由消息的。对于典型的路由功能,RabbitMQ 已经提供了一些内置的 Exchange 来实现。针对更复杂的路由功能,可以将多个 Exchange 绑定在一起,也通过插件机制实现自己的 Exchange 。
  3. 消息集群(Clustering)
    多个 RabbitMQ 服务器可以组成一个集群,形成一个逻辑 Broker 。
  4. 高可用(Highly Available Queues)
    队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用。
  5. 多种协议(Multi-protocol)
    RabbitMQ 支持多种消息队列协议,比如 STOMP、MQTT 等等。
  6. 多语言客户端(Many Clients)
    RabbitMQ 几乎支持所有常用语言,比如 Java、.NET、Ruby 等等。
  7. 管理界面(Management UI)
    RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker 的许多方面。
  8. 跟踪机制(Tracing)
    如果消息异常,RabbitMQ 提供了消息跟踪机制,使用者可以找出发生了什么。
  9. 插件机制(Plugin System)
    RabbitMQ 提供了许多插件,来从多方面进行扩展,也可以编写自己的插件。
    图片

RabbitMQ安装

本次主要采用Docker安装,安装起来简单方便。

https://hub.docker.com/_/rabbitmq

拉取镜像

docker pull rabbitmq:management

management与普通不带management的版本的区别是:带management的版本可以自带web管理界面。

创建容器

docker run -d 
--name myrabbitmq 
-p 5672:5672 
-p 15672:15672 
-v `pwd`/data:/var/lib/rabbitmq
-e RABBITMQ_DEFAULT_VHOST=my_vhost 
-e RABBITMQ_DEFAULT_USER=admin
-e RABBITMQ_DEFAULT_PASS=admin 
rabbitmq:management
  • -d 后台运行
  • –name 指定RabbitMQ容器名称
  • -p 映射端口
  • -v 数据卷映射位置
  • RABBITMQ_DEFAULT_USER 指定用户账号
  • RABBITMQ_DEFAULT_PASS 指定账号密码
  • RABBITMQ_DEFAULT_VHOST 指定虚拟主机名称

访问管理页面

没有配置安全组的话,先配置下安全组放开15672端口。界面英文不习惯的话,右键可以翻译下。

http://ip:15672/默认账号密码:admin/admin (如上创建容器时更换了默认密码,没设置则为guest/guest)

图片

2021-03-28,望技术有成后能回来看见自己的脚步

posted @ 2021-03-28 12:11  微笑刺客D  阅读(399)  评论(1编辑  收藏  举报
返回顶部