福建省建设厅网站施工员查询,成都最新防疫政策,怎么选择佛山网站设计,新乡新手学做网站1. 消息队列
消息队列是指利用队列这种数据结构进行消息发送、缓存、接收#xff0c;使得进程间能相互通信#xff0c;是点对点的通信
而消息代理是对消息队列的扩展#xff0c;支持对消息的路由#xff0c;是发布-订阅模式的通信#xff0c;消息的发送者并不清楚消息的…1. 消息队列
消息队列是指利用队列这种数据结构进行消息发送、缓存、接收使得进程间能相互通信是点对点的通信
而消息代理是对消息队列的扩展支持对消息的路由是发布-订阅模式的通信消息的发送者并不清楚消息的接收者消息可以被多个消费者接收。
使用消息队列的作用如下
异步:对于一些用户的请求可能包含一些发送短信发送邮件等系统处理此时可以不需要等待短息发送完成或者邮件发送完成而是通过消息队列通知这些模块即可返回避免用户长时间等待
解耦:将数据发送到消息队列对该数据感兴趣的系统自行订阅该消息即可这种做法可以降低代码的耦合度。
消峰填谷:将瞬时高并发请求打到消息队队列上作为数据库请求的缓冲避免短时间大量的数据库请求导致数据库奔溃。 2. RabbitMQ简介
RabbitMQ是一种开源的多协议消息代理软件它将消息发布者发布消息的应用程序也称为生产者接收消息并将它们路由到消费者处理消息的应用程序。
RabbitMQ支持多种消息传递协议其中AMQP 0-9-1是核心并以插件的形式支持STOMMQTTAMQP 1.0。
AMQP即Advanced Message Queuing Protocol中文名称是高级消息传递协议。
AMQP 0-9-1 模型如下图所示 消息生产者producer和消费者consumer均通过TCP连接消息代理broker生产者producer将消息投递到交换机exchange消息代理根据消息队列queue和交换机exchange的绑定关系bind将消息推送到对应的消息队列queue最后消费者consumer消费感兴趣消息队列中的数据。 2.1 RabbitMQ中的相关概念
Producer:消息生产者
Consumer:消息消费者
Broker:消息代理这里指即RabbitMQ通过消息代理可以将消息从生产者投递到消费者
Virtual host:虚拟主机使单个消息代理能提供了多个相对隔离的环境隔离的资源包括交换机、队列等
Exchange:交换机作用相当于现实生活的快递公司生产者的消息实际时先投递到交换机交换机再根据类型和绑定关系拷贝消息副本到指定队列交换机的类型有direct, topic, headers and fanout
Queue: 队列先进先出的优先级队列充当了一个缓冲区的角色作用相当于现实生活中的菜鸟驿站等代收点
Binding:交换机和队列的绑定关系交换机投递消息到指定队列的规则作用相当于现实生活中寄快递时填写的地址
Connection: 消息生产者和消费者通过TCP连接到虚拟主机确保数据传输到可靠性
Channel:共享单个TCP连接的轻量级的Connection不同Channel通过Channel ID隔离开互不影响通常一个进程可以只建立一个TCP连接减少TCP的资源开销 2.2 RabbitMQ特性
可靠性(Reliablity):使用TCP连接进行数据传输、且提供了消息持久化、队列持久化、生产者发送确认、消费者消费确认等机制保证消息的可靠
灵活的路由(Flexible Routing):提供了多种类型的交换机Exchange
消息集群(Clustering):多个RabbitMQ服务器可以组成一个集群形成一个逻辑消息代理Broker
高可用(Highly Avaliable Queues):队列可以在集群中的机器上进行镜像使得在部分节点出问题的情况下队列仍然可用
多种协议(Multi-protocol):支持多种消息队列协议核心是AMQP通过插件形式支持STOMP、MQTT等
多种语言客户端(Many Clients):几乎支持所有常用语言比如Java、Python、Golang等
管理界面(Management UI):提供了易用的用户界面使得用户可以监控和管理消息Broker的许多方面
跟踪机制(Tracing):如果消息异常RabbitMQ提供了消息的跟踪机制使用者可以找出发生了什么
插件机制(Plugin System):提供了许多插件来从多方面进行扩展也可以编辑自己的插件 3. RabbitMQ安装
3.1 安装Docker
参考Install Docker Desktop on Mac安装docker安装完成后点击Docker图标以启动Docker服务
这里简单介绍几个常用的docker命令
docker ps -a可以看到Docker启动过的容器 $ docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES8918b9e8bae2 rabbitmq:3-management docker-entrypoint.s… 2 days ago Up 2 days 4369/tcp, 5671/tcp, 0.0.0.0:5672-5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672-15672/tcp some-rabbit
docker stop CONTAINER ID停止运行中的容器 $ docker stop 8918b9e8bae28918b9e8bae2
docker restart CONTAINER ID重启容器 $ docker restart 8918b9e8bae28918b9e8bae2
docker exec -it CONTAINER ID /bin/bash 可以进入运行容器的终端 $ docker exec -it 8918b9e8bae2 /bin/bashrootmy-rabbit:/# 3.2 RabbitMQ安装及启动
打开终端在终端中输入
docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management
通过http://localhost:15672可以访问管理后台默认账号和密码均是guest
5672是AMQP 0-9-1使用的端口 4. 管理后台
管理后台提供了监控和管理RabbitMQ节点和集群的能力。
管理后台如下图所示 通过该管理后台可以查看当前活跃的Connection, Channel, Exchange, Queue等信息从图片可以看出当前活跃的Exchange共有7个具体的类型覆盖了direct, topic, headers and fanout四种。
通过这个管理后台也可以创建或者删除Connection, Channel, Exchange, Queue