RabbitMQ整理

RabbitMQ总结 (默认15672端口)

优点:

使用RabbitMQ消息队列可以实现应用解耦、通过异步请求来增强程序的反应速度,提高用户体验,还有就是可以实现流量削峰,将瞬间高并发的访问,削成一组一组的请求进行处理。

一、什么是MQ

消息队列是一种进程间通信或同一进程的不同线程间的通信方式

消息队列的机制使得:消息的发送者和消息的接收者不需要同时与消息队列互交。消息会保存在队列中,直到接收者取回它。

MQ是生产者-消费者模型的一个典型代表

实现:消息队列常常会保存在链表中。拥有权限的进程可以向消息队列中写入或读取消息。

二、AMQP与JMS

MQ是遵循了AMQP协议的具体实现和产品。

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

JMS,Java的消息服务(Java Message Service)应用程序接口,是一个java平台中关于面向消息中间件的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。常见的消息队列,大部分都实现了JMS API,如ActiveMQ,Redis以及RabbitMQ等。

三、优缺点

1、优点

应用解耦、异步处理、流量削峰

应用解耦:在加入新功能的时候需要频繁的重构代码,加入消息队列可以通过接入的方式来实现解耦。

异步处理:消息队列使得很多的功能都是异步来处理的,无需等待,响应速度很快。

流量削峰:将高并发请求下的同步访问变成串行访问达到一定量的限流。

另外:消息队列还可以做商品秒杀,利用消息队列可以将商品被购买的个数得到控制,不会出现10个商品被11个用户买到的情况。机制就是一旦队列中的商品卖完了,其他秒杀购买的请求全部阻塞。

2、缺点

系统可用性降低、系统复杂性增加、一致性问题(因为消息提供者和消费者不是一一对应)

比如:消费者出异常或者错误,消息队列中的消息不能被消费,而生产者在不断的放入消息,就容易撑爆消息队列。缺乏同步性带来的这系列问题应当被考虑。

四、消息队列使用场景

当不需要马上得到结果的请求,但是并发量又需要进行控制的时候,差不多了就是需要使用消息队列的时候。

使用场景:

服务间异步通信顺序消费定时任务请求削峰

如邮件发送、短信发送、日志记录(记录谁做了哪些操作)

一切不需要马上得到结果的请求,都可以使用消息队列来完成。()

五、为什么使用RabbitMq

RabbitMQ是目前三大消息队列之一(RabbitMQ、ActiveMQ、kafka—>主要用于大数据中的日志记录,在日志记录方面很优秀)。

使用RabbitMQ消息队列可以实现应用解耦、通过异步请求来增强程序的反应速度,提高用户体验,还有就是可以实现流量削峰,将瞬间高并发的访问,削成一组一组的请求进行处理。

六、RabbitMQ角色、权限讲解

1、RabbitMQ角色分类:

none、impersonator、management、policymaker、monitoring、administrator

2、RabbitMQ权限控制

默认 virtual host : “/”

默认用户:guest

guest具有"/"上的全部权限,仅能由localhost访问RabbitMQ包括Plugin,建议删除或修改密码。可通过配置文件中loopback_users置空来取消其本地访问的限制:

[{rabbit,[{loopback_users,[]}]

你可能感兴趣的:(中间件,RabbitMQ整理)