消息中间件

327 阅读3分钟

介绍消息中间件,我们首先来了解一下下面几个定义:

  • 中间件---是作用在业务系统之间,不是操作系统软件,不是最后直接提供给用户使用的.
  • 消息中间件---管制和关注数据的发送和接收,利用高效可靠的异步消息机制集成分布式系统
  • JMS---JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信(Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持),通过使用JMS的使用,我们可以解除应用程序之间的耦合。
  • AMQP协议---AMQP,即(Advanced Message Queuing Protocol),一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件同产品,不同的开发语言等条件的限制。

JMS消息模式

(一)队列模式,Point-to-Point Messaging Domain (点对点即P2P):

特点:

  1. 每个消息最好只有一个消费者,如果使用多个消费者,每个消费者只能随机接收其中的几条。

  2. 消费者可以随时消费队列中的消息,没有时间依赖性。

  3. 客户端包括生产者和消费者。

模型图:

(二)主题模式,Publish/Subscribe Messaging Domain (发布/订阅模式即PUB/SUB):

特点:

  1. 客户端包括发布者和订阅者。

  2. 消费者不能接受到订阅之前发布的消息,消息接收具有时间依赖性。

  3. 主题中的所有消息可以被所有消费者消费,不会随机分配。

模型图:

以上两种模式的实现的例子(使用activemq实现,集成了spring):

github.com/a1831868404…

消息中间件的使用场景

消息中间件的出现主要是为了解决:

  • 异步处理---例子:用户注册完账号的时候,可能需要发送注册邮件和注册短信(使用串行的形式,即一个一个发送对应的信息,则时间消耗为3倍。而使用并行的形式,即三个一起进行,相当于1倍的时间,效率提升了很多)
  • 应用解耦---例子:用户下单以后,需要去访问库存服务,串行处理的情况下,假如库存服务发生故障,则会导致订单系统服务失败。假如使用消息队列,用户下订单后,将一条信息写入信息队列,剩下的工作就交给消息中间件来处理,从而实现了订单服务和库存服务的解耦
  • 流量削锋---例如在进行秒杀活动的时候,将用户的请求放入消息队列,后台系统再从消息队列中取出消息进行消费或再做后续处理,而不至于瞬间所有请求都传到后台,很可能后台系统会被冲 垮。
  • 消息通讯---例如实现聊天室