【云原生 | 27】Docker部署运行开源消息队列实现RabbitMQ_docker 运行rabbitmq

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

作者简介🏅云计算领域优质创作者🏅新星计划第三季python赛道第一名🏅 阿里云ACE认证高级工程师🏅
✒️个人主页小鹏linux
💊个人社区小鹏linux个人社区欢迎您的加入

目录

1. 关于MQ

1.1 什么是MQ

1.2 MQ是干什么用的 

1.3 MQ衡量标准 

1.4 主流竞品分析 

2. 关于RabbitMQ

2.1 RabbitMQ的优势 

2.2 RabbitMQ架构 

2.3 RabbitMQ各组件功能 

3. 在Docker中运行RabbitMQ 

 👑👑👑结束语👑👑👑


分布式系统和大数据处理平台是目前业界关注的热门技术。

本篇文章将重点介绍热门的消息队列中间件RabbitMQ。

1. 关于MQ

1.1 什么是MQ

消息总线(Message Queue)是一种跨进程、异步的通信机制用于上下游传递消息。由消息系统来确保消息的可靠传递。

1.2 MQ是干什么用的 

应用解耦、异步、流量削锋、数据分发、错峰流控、日志收集等等...

1.3 MQ衡量标准 

服务性能、数据存储、集群架构

1.4 主流竞品分析 

当前市面上mq的产品很多比如RabbitMQ、Kafka、ActiveMQ、ZeroMQ和阿里巴巴捐献给Apache的RocketMQ。甚至连redis这种NoSQL都支持MQ的功能。

2. 关于RabbitMQ

 RabbitMQ是一个开源的消息代理和队列服务器用来通过普通协议在不同的应用之间共享数据(跨平台跨语言)。RabbitMQ是使用Erlang语言编写并且基于AMQP协议实现。

2.1 RabbitMQ的优势 

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

2.2 RabbitMQ架构 

2.3 RabbitMQ各组件功能 

  • Broker标识消息队列服务器实体.
  • Virtual Host虚拟主机。标识一批交换机、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个vhost本质上就是一个mini版的RabbitMQ服务器拥有自己的队列、交换器、绑定和权限机制。vhost是AMQP概念的基础必须在链接时指定RabbitMQ默认的vhost是 /。
  • Exchange交换器用来接收生产者发送的消息并将这些消息路由给服务器中的队列。
  • Queue消息队列用来保存消息直到发送给消费者。它是消息的容器也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面等待消费者连接到这个队列将其取走。
  • Banding绑定用于消息队列和交换机之间的关联。一个绑定就是基于路由键将交换机和消息队列连接起来的路由规则所以可以将交换器理解成一个由绑定构成的路由表。
  • Channel信道多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内地虚拟链接AMQP命令都是通过信道发出去的不管是发布消息、订阅队列还是接收消息这些动作都是通过信道完成。因为对于操作系统来说建立和销毁TCP都是非常昂贵的开销所以引入了信道的概念以复用一条TCP连接。
  • Connection网络连接比如一个TCP连接。
  • Publisher消息的生产者也是一个向交换器发布消息的客户端应用程序。
  • Consumer消息的消费者表示一个从一个消息队列中取得消息的客户端应用程序。
  • Message消息消息是不具名的它是由消息头和消息体组成。消息体是不透明的而消息头则是由一系列的可选属性组成这些属性包括routing-key(路由键)、priority(优先级)、delivery-mode(消息可能需要持久性存储[消息的路由模式])等。

3. 在Docker中运行RabbitMQ 

 AMQP架构中有两个主要组件Exchange和Queue两者都在服务端又称Broker由RabbitMQ实现的。客户端通常有Producer和Consumer两种类型如下图所示。

在使用RabbitMQ过程中需要注意的是它将数据存储在Node中默认情况为hostname。因此在使用docker run指令运行容器的时候应该通过-h/--hostname参数指定每一个rabbitmq daemon运行的主机名。这样就可以轻松地管理和维护数据了
$ docker run -d --hostname my-rabbit --name some-rabbit rabbitmq:3 
3f28f6290e05375363ee661151170d37fbc89ada004c3235f02997b711b4cb2b
用户使用rabbitmqctl工具进行远程管理或跨容器管理的时候会需要设置持久化的cookie。如果需要了解关于Erlang Cookie的信息可以参见RabbitMQ官网的集群指南。

这里可以使用RABBITMQ_ERLANG_COOKIE参数进行设置

$ docker run -d --hostname my-rabbit --name some-rabbit -e RABBITMQ_ERLANG_ COOKIE='secret cookie here' rabbitmq:3

使用cookie连接至一个独立的实例

$ docker run -it --rm --link some-rabbit:my-rabbit -e RABBITMQ_ERLANG_COOKIE= 'secret cookie here' rabbitmq:3 bash 
root@f2a2d3d27c75:/# rabbitmqctl -n rabbit@my-rabbit list_users Listing users ... 
guest [administrator]

同样也可以使用RABBITMQ_NODENAME简化指令

$ docker run -it --rm --link some-rabbit:my-rabbit -e RABBITMQ_ERLANG_COOKIE= 'secret cookie here' -e RABBITMQ_NODENAME=rabbit@my-rabbit rabbitmq:3 bash 
root@f2a2d3d27c75:/# rabbitmqctl list_users Listing users ... 
guest [administrator]
默认情况下rabbitmq会安装并启动一些管控插件如rabbitmq3- management。通常可以通过默认用户名密码以及标准管控端口15672访问这些插件
$ docker run -d --hostname my-rabbit --name some-rabbit rabbitmq:3-management

 用户可以通过浏览器访问http://container-ip:15672如果需要从宿主机外访问则使用8080端口

$ docker run -d --hostname my-rabbit --name some-rabbit -p 8080:15672 rabbitmq: 3-management
如果需要修改默认用户名与密码guestguest则可以使用RABBITMQ_DEFAULT_USER和RABBITMQ_DEFAULT_PASS环境变量
$ docker run -d --hostname my-rabbit --name some-rabbit -e RABBITMQ_DEFAULT_ USER=user -e RABBITMQ_DEFAULT_PASS=password rabbitmq:3-management

如果需要修改默认vhost可以修改RABBITMQ_DEFAULT_VHOST环境变量

$ docker run -d --hostname my-rabbit --name some-rabbit -e RABBITMQ_DEFAULT_ VHOST=my_vhost rabbitmq:3-management

然后连接至daemon

$ docker run --name some-app --link some-rabbit:rabbit -d application-that-uses- rabbitmq

 用户也可以访问官方镜像仓库并对Dockerfile进行更多定制。

 

 👑👑👑结束语👑👑👑

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: DockerRabbitMQ

“【云原生 | 27】Docker部署运行开源消息队列实现RabbitMQ_docker 运行rabbitmq” 的相关文章