Docker一键安装RabbitMQ

作者: 李多多 日期: 2019-08-04
Docker | RabbitMQ
Docker一键安装RabbitMQ

基本概念

AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个进程间传递异步消息的网络协议。

RabbitMQ是采用Erlang语言实现AMQP(Advanced Message Queuing Protocol,高级消息队列协议)的消息中间件,它最初起源于金融系统,用于在分布式系统中存储转发消息。

MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的MQ产品有IBM WEBSPHERE MQ等等。

什么是消息中间件

消息(Message)是指在应用间传送的数据,消息可以很简单,如:文本字符串、JSON等,也可以很复杂,如:内嵌对象等。

消息队列中间件(Message Queue Middleware,简称MQ)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成,通过提供消息传递和消息排队模型,可以在分布式环境下扩展进程间的通信。

消息队列中间件,也可成为消息队列或者消息中间件,它一般有二种传递模式:

  1. 点对点(P2P,Point-to-Point)模式
    点对点模式是基于队列的,消息生产者发送消息到队列,消息消费者从队列中接收消息,队列的存在使得消息的异步传输成为可能。

  2. 发布/订阅(Pub/Sub)模式
    发布订阅模式定义了如何向一个内容节点发布和订阅消息,这个内容节点成为主题,主题可以认为是消息传递的中介,消息发布者将消息发布到某个主题,而消息的订阅者则从主题中订阅消息。主题使得消息的订阅和消息的发布者互相保持独立,不需要进行接触即可保证消息的传递,发布/订阅模式在消息的一对多广播时采用。

主要特性

  • 可伸缩性:集群服务

  • 消息持久化:从内存持久化消息到硬盘,再从硬盘加载到内存

  • 可靠性:使用一些机制来保证可靠性,如持久化、传输确认及发布确认等;

  • 灵活的路由:在消息进入队列之前,通过交换器来路由消息。对于典型的路由功能,RabbitMQ已经提供了一些内置的交换器来实现;

  • 扩展性:多个RabbitMQ节点可以组成一个集群,也可以根据实际业务情况动态地扩展集群中节点;

  • 高可用性:队列可以在集群中的机器上设置镜像,使得在部分 节点出现问题的情况下队列仍然可用;

  • 多种协议:RabbitMQ除了原生支持AMQP协议,还支持 STOMP、MQTT等多种消息中间件协议;

  • 多语言客户端:RabbitMQ几乎支持所有常用语言,比如Java、 Python、Ruby、PHP、C#、JavaScript等;

  • 管理界面:RabbitMQ提供了一个易用的用户界面,使得用户 可以监控和管理消息、集群中的节点等;

  • 插件机制:RabbitMQ提供了许多插件,以实现从多方面进行 扩展,当然也可以编写自己的插件。

RabbitMQ 核心概念

  1. Publisher:生产者,消息的发送方。
  2. Connection:网络连接。
  3. Channel:信道,多路复用连接中的一条独立的双向数据流通道。
  4. Exchange:交换器(路由器),负责消息的路由到相应队列。
  5. Binding:队列与交换器间的关联绑定。消费者将关注的队列绑定到指定交换器上,以便Exchange能准确分发消息到指定队列。
  6. Queue:队列,消息的缓冲存储区。
  7. Virtual Host:虚拟主机,虚拟主机提供资源的逻辑分组和分离。包含连接,交换,队列,绑定,用户权限,策略等。
  8. Broker:消息队列的服务器实体。
  9. Consumer:消费者,消息的接收方。

RabbitMQ安装

原始的安装方法有点复杂,现在有一个强大的东西叫Docker, 直接用docker一键安装快速方便。如果不会用docker的话请点击这里的教程安装学习。这里就假设已经成功安装了docker.

1.首先来到docker hub首页:https://hub.docker.com ,搜索RabbitMQ,如下:

image.png

找到Management Plugin,复制下列命令:
image.png
然后打开命令框,先开启docker,然后将刚才复制的命令粘进去,此处的 -P 是随机端口,便于测试

[root@localhost lemon]# service docker start
Redirecting to /bin/systemctl start docker.service
[root@localhost lemon]# docker run -d --hostname my-rabbit --name some-rabbit -P rabbitmq:3-management
f5eb3c4645a2b844253021210a171143eeadac912f21a8c9d7be0f8371fcad2e

然后看有没有跑起来,如下:

[root@localhost lemon]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f5eb3c4645a2 rabbitmq:3-management "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 0.0.0.0:32773->4369/tcp, 0.0.0.0:32772->5671/tcp, 0.0.0.0:32771->5672/tcp, 0.0.0.0:32770->15671/tcp, 0.0.0.0:32769->15672/tcp, 0.0.0.0:32768->25672/tcp some-rabbit

这里的15672为管理端口,映射到了32769端口。通信端口为 5672,映射到了32771 端口,浏览器输入:http://192.168.1.132:32769

image.png

如果看到上面页面就说明你的rabbitmq已经安装好了,默认用户名密码为:guest ,点击登录。如下:

image.png

登陆成功页面。