RabbitMQ (一) 简介

RabbitMQ的优点

基于ErLang语言开发具有高可用高并发的优点, 适合集群服务器

健壮, 稳定, 跨平台, 支持多种语言, 文档齐全

有消息确认机制和持久化机制, 可靠性高

RabbitMQ的概念

生产者和消费者

Product: 消息的生产者

Consumer: 消息的消费者

Queue

消息队列, 提供了FIFO的处理机制, 具有缓存消息的能力. RabbitMQ中, 队列消息可以设置为持久化, 临时或者自动删除

设置为持久化的机制, Queue中的消息会在Server本地硬盘存储一份, 防止系统Crash, 数据丢失

设置为临时队列, Queue中的数据在系统重启之后就会丢失

设置为自动删除的队列, 当不存在用户连接到Server, 队列中的数据会被自动删除

Exchange

Exchange类似于数据通信网络中的交换机, 提供消息路由策略。RabbitMQ中, Producer不是通过信道直接将消息发送给Queue, 而是先发送给Exchange. 一个Exchange可以和多个Queue进行绑定, Producer在传递消息的时候, 会传递一个ROUTING_KEY, Exchange会根据这个ROUTING_KEY按照特定的路由算法, 将消息路由给指定的Queue. 和Queue一样, Exchange也可以设置为持久化, 临时或者自动删除

Exchange的4中类型

direct(默认): 直接交换器, 工作方式类似于单播。Exchange会将消息完全匹配ROUTING_KEY的Queue(key就等于queue)

fanout: 广播是式交换器, 不管消息的ROUTING_KEY设置为什么, Exchange都会将消息转发给所有绑定的Queue, 给所有的queue都来一份)

topic: 主题交换器, 工作方式类似于组播, Exchange会将消息转发和ROUTING_KEY匹配模式相同的所有队列。比如: ROUTING_KEY为user.stock的Message会转发给绑定匹配模式为*.stock.user.stock, *.*和#.user.stock.#的队列

headers: 消息体的header匹配, 无视key, 通过查看消息的头部元素数据来决定分发给哪个queue(AMQP头部元数据非常丰富而且可以自定义)

Binding

所谓绑定就是将一个特定的Exchange和一个特定的Queue绑定起来。Exchange和Queue的绑定可以是多对多的关系

Virtual Host

在RabbitMQ Server上可以创建多个虚拟的Message Broker, 又叫做Virtual Host(vhosts)。每一个vhost本质上是一个mini-rabbitmq server, 分别管理各自的Exchange, 和bindings. vhost相当于物理的server, 可以为不同app提供边界隔离, 使得应用安全的运行在不同的vhost实例上, 相互之间不会干扰。Producer和Consumer连接rabbit server需要制定一个vhost

 

MQ消息投递模型

RabbitMQ的使用过程

客户端连接到消息队列服务器, 打开一个Channel

客户端声明一个Exchange, 并设置相关属性

客户端声明一个Queue, 并设置相关属性

客户端使用Routing Key, 在Exchange和Queue之间建立好绑定关系

客户端投递消息到Exchange

Exchange接收到消息后, 就根据消息的key和已经设置的binding, 进行消息路由, 将消息投递到一个或多个队列里。

 

RabbitMQ-安装

基于Docker来安装RabbitMQ

docker-compose.yml

version: ‘3.1’
services: 
  rabbitmq:
restart: always
image: rabbitmq:management
container_name: rabbitmq
ports:
  - 5672:5672
  - 15672: 15672
environment:
  TZ: Asia/Shanghai
  RABBITMQ_DEFAULT_USER: rabbit
  RABBITMQ_DEFAULT_PASS: 123456
volumes:
  - ./data:/var/lib/rabbitmq

RabbitMQ WebUI

访问地址

http://ip:15672

发布了69 篇原创文章 · 获赞 8 · 访问量 9419

猜你喜欢

转载自blog.csdn.net/u011414629/article/details/101165840
今日推荐