一、什么是消息中间件

  1. 关注于数据的发送和接收,利用高效可靠的异步消息传递机制集成分布式系统。

二、为什么时候消息中间件

  1. 1.解耦合
  2. 2.异步
  3. 3.横向扩展
  4. 4.安全可靠
  5. 5.顺序保证

三、消息中间件方案

  1. 1.Java消息服务(Java Message Service)即JMS,是一个Java平台中关于面向消息中间件的API,用于在两个应用程序之间或分布式中发送消息,进行异步通信。
  2. 2.AMQP(advanced message queuing protocol)是一个提供统一消息服务的应用层标准协议,基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件的不同产品,不同开发语言等条件限制。

JMS与AMQP对比

说明 JMS规范 AMQP协议
定义 java API wire-protocol
跨语言
消息类型 p2p,pub/sub direct,fanout,topic,headers,system
消息类型 TextMessage,MapMessage,BytesMessage,StreamMessage,ObjectMessage,Message byte[]
综合评价 JMS定义了Java API层面的标准;在Java体系中,多个clietn均可以通过JMS进行交互,不需要应用修改代码,但是其对跨平台的支持较差 AMQP的主要特征是面向消息、队列、路由、可靠性、安全

四、常用消息中间件

1.ActiveMQ

  1. 1)多语言和协议客户端。
  2. 语言:
  3. Java、C、C++、C#、Ruby、Perl、Python、PHP
  4. 协议:
  5. OpenWire、Stomp、REST、WS、XMPP、AMQP
  6. 2)完全支持JMS1.1和J2EE1.4规范(持久化,XA消息和事务)
  7. 3)虚拟主题、组合目的、镜像队列

2.RabbitMQ

  1. 1)多语言客户端:
  2. Java、Python、Ruby、C、PHP等
  3. 2)事务支持/发布确定
  4. 3)消息持久化

3.Kafka

  1. 一种高吞吐量的分布式发布订阅消息系统,是一个分布式、分区的、可靠的分布式日志存储服务。

3个消息中间件的综合评价

说明 ActiveMQ RabbitMQ Kafka
跨语言 支持(Java优先) 与语言无关 支持(Java优先)
支持协议 OpenWire,Stomp,XMPP,AMQP AMQP  
优点 遵循JMS规范,安装部署方便 继承Erlang天生的并发性,用于金融行业,稳定性,安全性有保障 依赖ZK,可动态扩展节点,高性能,高吞吐量,无线扩容,消息可指定追溯
缺点 会莫名丢失消息 Erlang语言难度较大,不支持动态扩展 严格的顺序机制,不支持消息优先,不支持标准消息协议,不利于平滑迁移
总结 适合中小型企业级消息应用场景,不适合上千个队列的应用 适合对稳定性要求高的企业级引用 一般应用在大数据日志处理或实时性,可靠性要求稍低的场景。
 
分类: 消息中间件

一、什么是消息中间件

  1. 关注于数据的发送和接收,利用高效可靠的异步消息传递机制集成分布式系统。

二、为什么时候消息中间件

  1. 1.解耦合
  2. 2.异步
  3. 3.横向扩展
  4. 4.安全可靠
  5. 5.顺序保证

三、消息中间件方案

  1. 1.Java消息服务(Java Message Service)即JMS,是一个Java平台中关于面向消息中间件的API,用于在两个应用程序之间或分布式中发送消息,进行异步通信。
  2. 2.AMQP(advanced message queuing protocol)是一个提供统一消息服务的应用层标准协议,基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件的不同产品,不同开发语言等条件限制。

JMS与AMQP对比

说明 JMS规范 AMQP协议
定义 java API wire-protocol
跨语言
消息类型 p2p,pub/sub direct,fanout,topic,headers,system
消息类型 TextMessage,MapMessage,BytesMessage,StreamMessage,ObjectMessage,Message byte[]
综合评价 JMS定义了Java API层面的标准;在Java体系中,多个clietn均可以通过JMS进行交互,不需要应用修改代码,但是其对跨平台的支持较差 AMQP的主要特征是面向消息、队列、路由、可靠性、安全

四、常用消息中间件

1.ActiveMQ

  1. 1)多语言和协议客户端。
  2. 语言:
  3. Java、C、C++、C#、Ruby、Perl、Python、PHP
  4. 协议:
  5. OpenWire、Stomp、REST、WS、XMPP、AMQP
  6. 2)完全支持JMS1.1和J2EE1.4规范(持久化,XA消息和事务)
  7. 3)虚拟主题、组合目的、镜像队列

2.RabbitMQ

  1. 1)多语言客户端:
  2. Java、Python、Ruby、C、PHP等
  3. 2)事务支持/发布确定
  4. 3)消息持久化

3.Kafka

  1. 一种高吞吐量的分布式发布订阅消息系统,是一个分布式、分区的、可靠的分布式日志存储服务。

3个消息中间件的综合评价

说明 ActiveMQ RabbitMQ Kafka
跨语言 支持(Java优先) 与语言无关 支持(Java优先)
支持协议 OpenWire,Stomp,XMPP,AMQP AMQP  
优点 遵循JMS规范,安装部署方便 继承Erlang天生的并发性,用于金融行业,稳定性,安全性有保障 依赖ZK,可动态扩展节点,高性能,高吞吐量,无线扩容,消息可指定追溯
缺点 会莫名丢失消息 Erlang语言难度较大,不支持动态扩展 严格的顺序机制,不支持消息优先,不支持标准消息协议,不利于平滑迁移
总结 适合中小型企业级消息应用场景,不适合上千个队列的应用 适合对稳定性要求高的企业级引用 一般应用在大数据日志处理或实时性,可靠性要求稍低的场景。
 
分类: 消息中间件