RabbitMQ 入门之基础概念

什么是消息队列(MQ)

消息是在不同应用间传递的数据。这里的消息可以非常简单,比如只包含字符串,也可以非常复杂,包含多个嵌套的对象。消息队列(Message Queue)简单来说就是一种应用程序间的通讯方式,消息发送后立即返回,然后由消息系统保证消息的可靠性传输,消息生产者只需要把消息发到 MQ 中就可以了,不需要关心消息的消费,同样,消息消费者只管从 MQ 中拉取消息而不管是谁生产的消息,通过这样的一个“互相不知道对象存在”模式,将消息的生产者和消息的消费者解耦了。

什么场景下考虑使用消息队列

从上面可以知道,消息队列是一种应用间的异步协作机制,那么我们什么时候需要用到 MQ 呢?以常见的订单系统为例,当用户点击「下单」后的业务逻辑可能包括:扣减库存、生成相应订单数据、发短信通知等。在项目和业务发展初期上面这些逻辑可能放在一起执行,随着业务的发展订单量的增加,需要提升系统服务的性能,此时就可以将一些不需要立即生效的操作这份出来异步执行,比如发送短信通知等。这种场景下就可以使用 MQ ,在下单主流程(比如扣减库存、生成订单数据等)完成之后发送一条消息到 MQ 让主流程快速走完,然后由另外一个线程拉取 MQ 的消息,执行相应的业务逻辑。这里的例子主要是用消息队列来解耦。

RabbitMQ 的特点

RabbitMQ 是一个由 Relang 语言开发的 AMQP 的开源实现。AMQP(Advanced Message Queue:高级消息度列协议)它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。RabbitMQ 最初起源于消息系统,用于在分布式系统中存储转发消息,具体有如下一些特点:

可靠性: RabbitMQ 使用一些机制来保证可靠性,比如持久化、传输确认机制(ack)和发布确认等。

灵活的路由策略: 在消息进入队列之前,通过 Exchange 来路由消息,对于典型的路由功能,RabbitMQ 已经提供了一些内置的 Exchange 来实现。针对复杂的路由功能,可以将多个 Exchange 绑在一起,也通过插件机制实现自己的 Exchange。

消息集群: 多个 RabbitMQ 服务器可以组成一个集群,形成一个逻辑 Broker。

高可用: 队列可以在集群中的集群上进行镜像,使得在部分节点出问题的情况下队列仍然可用。

多种协议: RabbitMQ 支持多种消息队列协议,比如 STOMP、MQTT 等。

多语言客户端: RabbitMQ 几乎支持多有常用的语言,比如:Java、.NET 等

管理界面: RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker 的许多方面。

RabbitMQ 安装(mac)和运行

1、安装
因为 RabbitMQ 依赖于 Erlang 语言,所以在安装 RabbitMQ 之前需要先安装 Erlang 环境,但是由于是 Mac 环境,可以使用 HomeBrew 安装,安装前先更新 brew:

brew update

接着安装 RabbitMQ 即可,安装过程中会自动安装其所依赖的 Erlang。

rabbitmq-base-7.jpeg

2、运行
RabbitMQ 的启动运行很简单,找到其安装目录后(使用 Homwbrew 安装的默认目录为:/usr/local/Cellar/rabbitmq),进入到目录的 sbin 目录下,可以看到有 6 个
以 rabbitmq 开头的可执行文件,直接执行 rabbitmq-server 即可。

rabbitmq-base-8.jpeg

启动正常的话可以看到启动过程的日志信息和最后的 completed with 6 plugins,这也说明启动的时候默认加载了 6 个插件。

rabbitmq-base-9.jpeg

此时通过浏览器访问 :15672 可以看到其管理界面(默认用户名和密码都是 guest),可以在 admin 选项卡页面新增用户,管理界面如下:

rabbitmq-base-10.jpeg

PS: 以上方式不是后台启动,如果想让 RabbitMQ 后台守护进程的方式启动的话,可以在启动的时候加上 -detached 参数。

rabbitmq-base-11.jpeg

3、查询服务器状态
在安装目录的 sbin 下面有个可执行文件 rabbitmqctl ,它提供了 RabbitMQ 管理需要的几乎一站式解决方案,绝大部分的运维命令它都可以提供。查询 RabbitMQ 服务器的状态信息可以用参数 status。

rabbitmq-base-12.jpeg

RabbitMQ 中的基础概念

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzpjj.html