小程序开发定制【云原生 | 27】Docker部署运行开源消息队列实现RabbitMQ

作者简介:🏅小程序开发定制云计算领域优质创作者🏅小程序开发定制新星计划第三季python小程序开发定制赛道第一名🏅 🏅
✒️个人主页:
💊个人社区:小程序开发定制欢迎您的加入!

目录


小程序开发定制分布式系统和大数据处小程序开发定制理平台是目前业界关注小程序开发定制的热门技术。

小程序开发定制本篇文章将重点介绍热小程序开发定制门的消息队列中间件RabbitMQ。

1. 关于MQ

1.1 什么是MQ?

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

1.2 MQ是干什么用的? 

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

1.3 MQ衡量标准 

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

1.4 主流竞品分析 

当前市面上mq的产品很多,比如、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. 在中运行RabbitMQ 

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

在使用RabbitMQ过程中需要注意的是,它将数据存储在Node中,默认情况为hostname。因此在使用docker run指令运行容器的时候,应该通过-h/--hostname参数指定每一个rabbitmq daemon运行的主机名。这样就可以轻松地管理和维护数据了:
  1. $ docker run -d --hostname my-rabbit --name some-rabbit rabbitmq:3
  2. 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连接至一个独立的实例:

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

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

  1. $ 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
  2. root@f2a2d3d27c75:/# rabbitmqctl list_users Listing users ...
  3. guest [administrator]
默认情况下,rabbitmq会安装并启动一些管控插件,如rabbitmq:3- 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
如果需要修改默认用户名与密码(guest:guest),则可以使用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进行更多定制。

 

 👑👑👑结束语👑👑👑

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发