RabbitMQ介绍

122 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

1 存在的问题

1.1 服务间的异步调用

服务A如何保证异步请求一定能被服务B接收到并处理 image.png

1.2 削峰

海量请求,如何实现削峰的效果,将请求全部放到一个队列中,慢慢的消费,这个队列怎么实现。 image.png

1.3 服务解耦

如何尽量降低服务间的耦合问题,如果把订单服务与积分服务和商家服务解耦,就需要一个队列,而这个队列也需要能实现上述两个功能。

image.png

2 处理问题

2.1 服务间的异步调用

若是用Rabbit解决异步调用的问题,课如下图示操作。
只要服务A将消息发送到了RabbitMQ上,则服务A就完成自己的业务,后续的事情只需要服务B监听RabbitMQ即可。
RabbitMQ则保证只要接收到消息,则进行持久化,只要有服务B在监听消息,则B一定可以拿到这个消息,从而实现异步调用。 image.png

2.2 削峰

当网关接收到海量的请求的时候,网关可以把请求直接扔到RabbitMQ上,可以让服务端慢慢消费。再多的请求也只是在RabbitMQ中不会打到服务上。 image.png

2.3 服务解耦

让RabbitMQ作为订单服务与积分服务和商家服务间的消息中间件。订单服务发送一个消息,同时上积分服务和商家服务都进行消费。哪怕后期新增服务,也可以监听消息即可,不需要做额外修改。 image.png

3 RabbitMQ介绍

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用[Erlang]语言编写的,而群集和故障转移是构建在[开放电信平台]框架上的。所有主要的编程语言均有与代理接口通讯的客户端[库]。

3.1 AMQP协议--高级消息队列协议

即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。

3.2 Erlang

是一种通用的面向并发的编程语言,是运行于虚拟机的解释性语言,在编程范型上,Erlang属于多重范型编程语言,涵盖函数式、并发式及分布式。顺序执行的Erlang是一个及早求值,单次赋值和动态类型的函数式编程语言。它支持多核的特性非常适合多核CPU,而分布式特性也可以很好融合各种分布式集群。
简单说,Erlang能充分发挥CPU的性能,延迟特别低。

3.3 支持多种语言通讯

3.4 支持海量的插件去实现一些特殊功能,自带了一款图形化界面,操作简单