RabbitMQ基本使用
基本概念
RabbitMQ是一个基于Erlang语言开源的消息代理和队列服务器,通过amqp协议在完全不同的应用之间共享数据,或者简单的将作业排队以便让分布式服务器进行处理。具有轻量、易于部署、支持多种消息协议的特点。同时可以部署在分布式系统中,用来满足大规模、高可用的需求
安装教程
Ubuntu/Debain安装
首先需要安装rabbitmq-server,在安装rabbitmq-server的同时会安装erlang的环境
1 |
|
查看是否启动成功
1 |
|
安装管理面板
1 |
|
需要注意的是,默认的guest用户无法在外部访问,需要额外创建一个用户
1 |
|
授予用户管理员权限
1 |
|
其中管理系统的端口是15672,用于通信的端口是5672,创建完成账号之后需要在管理系统创建虚拟主机
Docker安装
安装rabbit-mq
1 |
|
进入容器内部
1 |
|
开启管理面板
1 |
|
基本概念
Channel:我们的客户端连接都会使用一个Channel,再通过Channel去访问到RabbitMQ服务器,注意通信协议不是http,而是amqp协议。
Exchange:类似于交换机一样的存在,会根据我们的请求,转发给相应的消息队列,每个队列都可以绑定到Exchange上,这样Exchange就可以将数据转发给队列了,可以存在很多个,不同的Exchange类型可以用于实现不同消息的模式。
Queue:消息队列本体,生产者所有的消息都存放在消息队列中,等待消费者取出。
Virtual Host:有点类似于环境隔离,不同环境都可以单独配置一个Virtual Host,每个Virtual Host可以包含很多个Exchange和Queue,每个Virtual Host相互之间不影响
模式分类
简单队列模式
简单队列模式可以想象成一个邮局:当您将要投寄的邮件放入邮箱时,您可以确定邮递员最终会将邮件投递给您的收件人。在这个类比中,RabbitMQ 是一个邮箱、一个邮局和一个邮递员
工作队列模式
工作队列(又名:任务队列)背后的主要思想是避免立即执行资源密集型任务而不得不等待它完成。相反,我们安排任务稍后完成。我们将 任务封装为消息并将其发送到队列。在后台运行的工作进程将弹出任务并最终执行作业。当您运行许多工作时,任务将在他们之间共享。工作队列也称为公平性队列模式。采用的是循环分发,假如我们拥有两个消费者,默认情况下,RabbitMQ 将按顺序将每条消息发送给下一个消费者,平均而言,每个消费者将获得相同数量的消息,这种分发消息的方式称为轮询
发布订阅模式
工作队列背后的假设是每项任务都恰好交付给一个工作人员。在这一部分中,我们将做一些完全不同的事情——我们将向多个消费者传递一条消息。这种模式被称为“发布/订阅”。在应用中,只需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。
路由模式
在发布/订阅模式的基础上,有选择的接收消息,也就是通过 routing 路由进行匹配条件是否满足接收消息。路由模式跟发布订阅模式类似,然后在订阅模式的基础上加上了类型,订阅模式是分发到所有绑定到交换机的队列,路由模式只分发到绑定在交换机上面指定路由键的队列
主题模式
主题模式跟路由模式类似,只不过路由模式是指定固定的路由键routingKey,而主题模式是可以模糊匹配路由键routingKey,类似于SQL中 = 和 like 的关系
RPC模式
RPC模式是拥有请求/回复的。也就是有响应的。RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据