消息队列

消息队列

一、什么是消息队列
消息是指在应用程序之间传输的数据,消息可以非常的简单,比如只包含文本字符串,也可以很复杂,包含嵌入对象。消息队列是应用间通信的方式,消息发送之后可以立即返回,有消息系统来确保消息的可靠传递,消息发布者只需要把消息发送给MQ,不用管谁来取。消费者从MQ中去消息,不用管谁发布的,这样消费者和生产者都不知道对方的存在。
二、为什么要使用消息队列
消息队列是一种应用间的异步协作机制。
以常见的订单系统为例,用户点击下单按钮后的业务逻辑包括:扣减库存,生成相应的单据,发红包,发短信通知,在业务发展的初期这些逻辑可能会放在一起执行,但是随着业务订单量的增长,需要提升系统服务的性能,这个时候就可以把一些不需要立即生成的拆分出来异步执行,比如发红包,发短信这些场景可以用MQ,在下单的主流程(扣减库存,生成相应的单据)完成之后发送一条消息到MQ让主流程快速完结,而有另外的单线程拉取MQ的消息,当发现MQ中有发红包或者发短信的消息,执行相应的业务逻辑。
三、RabbitMQ的特点

RabbitMQ是一个有Erlang语言开发的AMQP的开源实现
AMQP:Advanced Meassage Queue,高级消息队列协议。他是应用层协议的一个开放标准,为面向消息的中间设计,基于此协议的客户端和中间件可以传输消息,并不受产品,开发语言等条件的限制。
RabbitMQ最初起源于金融系统,用于分布式系统中存储转发消息,在易用性,扩展性,高可用等方面表现不俗。
RabbitMQ特点:

  1. 可靠性(Reliablitiy):
    RabbitMQ使用一些机制来保障可靠性,如持久化,传输确认,发布确认

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

  3. 消息集群
    多个MQ服务器可以做成一个集群,形成一个逻辑Broker

  4. 高可用
    队列可以在集群中的机器上进行镜像,使得在部分节点出现问题依然可以使用

  5. 多种协议
    RabbitMQ支持多种协议,比如STOMP,MQTT等等。

  6. 多语言客户端
    RabbitMQ几乎支持所有常用语言,Java、.NET、Ruby等等。

  7. 管理界面
    RabbitMQ提供了易用的用户界面,用户可以监控和管理消息Broker的许多方面。

  8. 跟踪机制
    如果消息发生异常,使用者可以找出发生了什么。

  9. 插件机制
    RabbitMQ提供了很多插件,来从多个方面进行扩展,也可以编写自己的插件。

消息队列的应用以及好处
消息队列的应用场景:

  1. 比如点菜,服务员点菜很快,但是厨师做饭慢,服务员只需要把菜单给厨师,然后继续去点菜,不需要等厨师做完。菜单就相当于消息,放菜单的地方就是消息队列。
  2. 比如业务需要发送短信,但是短信发送速度慢,这个时候我们可以用消息队列,把发送短信的相关信息封装成一个消息,放入队列,短信发送模块从队列中获取消息进行处理

消息队列的好处

  1. 提高系统的响应速度
    使用消息队列,生产者只需要把消息扔到消息队列中,就可以立马相应用户,不需要再去等待处理结果

  2. 保证消息的传递
    如果发送消息时,接受者不可用,消息队里会保留消息,直到成功传递

  3. 解耦
    只要消息格式不变,即使接受者的接口,位置或者配置改变,也不会给发送者带来任何改变,消息发送者无需知道谁消费,使得系统设计更清晰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值