消息队列

消息模型

点对点

只能被一个消费者消费一次

批注 2020-03-17 153818

发布订阅

消息生产者向频道发送一个消息之后,多个消费者可以从该频道订阅到这条消息并消费

批注 2020-03-17 153854

使用场景

  • 异步处理
    • 发送者发送消息之后无需等待,可以直接返回
  • 流量削峰
    • 高并发的情况下,将请求发送到消息队列,服务器按照处理能力对请求进行处理
  • 应用解耦
    • 如果模块之间不直接进行调用,模块之间耦合度就会很低

可靠性

发送端的可靠性

通过本地消息表实现

接收端的可靠性

  • 保证消费幂等性
  • 保证消息具有唯一编号

消息堆积

如果消费端出现问题,可能就会造成队列的消息堆积

此时,处理方案只需要恢复消费端的处理能力即可

但是如果消息队列即将被写满,就必须将快要满的这个队列的消息分发到其他消息队列,临时加派消费者加快处理这些消息

消息失效

消息失效导致的大量消息丢失,只能写程序慢慢将丢失的那些消息补回来

消息中间件带来的好处

  • 解耦
  • 异步
  • 横向扩展
  • 安全可靠
  • 顺序保证

中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。 中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。

消息中间件是指一种在需要进行网络通信的系统进行通道的建立,数据或文件发送的中间件。消息中间件的一个重要作用是可以跨平台操作,为不同操作系统上的应用软件集成提供便利。

JMS

Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。 Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。

  • 队列模型
  • 主题模型

JMS编码接口之间的关系

批注 2019-07-18 152532

AMQP

高级消息队列协议即Advanced Message Queuing Protocol(AMQP)是一个用于统一面向消息中间件实现的一套标准协议,其设计目标是对于消息的排序、路由(包括点对点和订阅-发布)、保持可靠性、保证安全性。

对比

批注 2019-07-18 150607

消息队列设计

从几个方面考虑:

  • 可伸缩性
    • 也就是能根据系统负载动态增减节点
  • 持久化
    • 持久化的开销
  • 高可用
    • 主节点的选举,主从之间的数据复制
  • 消息可靠性保证

results matching " "

No results matching " "

results matching " "

No results matching " "