作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道第一名🏅 阿里云ACE认证高级工程师🏅
✒️个人主页:小鹏linux
💊个人社区:小鹏linux(个人社区)欢迎您的加入!
目录
分布式系统和大数据处理平台是目前业界关注的热门技术。 本篇文章将重点介绍热门的消息队列中间件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的优势
|
2.2 RabbitMQ架构
2.3 RabbitMQ各组件功能
|
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会安装并启动一些管控插件,如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进行更多定制。 |
👑👑👑结束语👑👑👑