MQ消息队列简介

什么是MQ?

MQ全称为Message Queue, 消息队列(MQ)是应用程序“对”应用程序的通信方法。
MQ:生产者者往消息队列中写消息,消费可以读取队列中的消息。


下一代编程 : 响应式编程

目前spring boot 2.2还在研发中,

提供非阻塞

  • RSocket协议
  • spring-boot-starter-data-redis-reactive,
  • spring-boot-starter-data-mogodb-reactive等

采用netty(Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序)。tomcat9内置Netty。


常见的MQ

Apache ActiveMQ 

  • https://activemq.apache.org/
  • Apache ActiveMQ™基于Java的消息服务器。它支持行业标准协议,因此用户可以通过广泛的语言和平台获得客户选择的好处。可以使用C,C ++,Python,.Net等连接。使用无处不在的AMQP协议集成您的多平台应用程序。使用STOMP通过websockets 在Web应用程序之间交换消息。使用MQTT管理您的IoT设备。支持您现有的JMS基础架构及其他。ActiveMQ提供强大的功能和灵活性,以支持任何消息传递用例。
  • 目前有两种的ActiveMQ可供选择经典5.x和下一代Artemis。一旦Artemis与5.x代码库达到足够的功能奇偶校验,它将成为ActiveMQ 6.初始迁移文档可用。

    ActiveMQ 5  

  1. JMS 1.1具有完整的客户端实现,包括JNDI
  2. 使用共享存储的高可用性
  3. 熟悉的基于JMS的寻址模型
  4. 用于分配负载的“经纪人网络”
  5. 用于持久性的KahaDB和JDBC选项

    ActiveMQ Artemis

      用于下一代事件驱动的消息传递应用程序的高性能,非阻塞体系结构。

  1. JMS 1.1和2.0,包括JNDI在内的完整客户端实现
  2. 使用共享存储或网络复制的高可用性
  3. 简单而强大的协议无关寻址模型
  4. 灵活的群集,用于分配负载
  5. 用于低延迟持久性和JDBC的高级日志实现
  6. 与ActiveMQ 5实现高特性奇偶校验,以简化迁移动
    Apollo
  • 已难产

Apache Kafka

     http://kafka.apache.org/

  • Kafka作为一个集群,运行在一台或者多台服务器上.
  • Kafka 通过 topic 对存储的流数据进行分类。
  • 每条记录中包含一个key,一个value和一个timestamp(时间戳)

 

       Kafka有四个核心的API:

  • The Producer API 允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。
  • The Consumer API 允许一个应用程序订阅一个或多个 topic ,并且对发布给他们的流式数据进行处理。
  • The Streams API 允许一个应用程序作为一个流处理器,消费一个或者多个topic产生的输入流,然后生产一个输出流到一个或多个topic中去,在输入输出流中进行有效的转换。
  • The Connector API 允许构建并运行可重用的生产者或者消费者,将Kafka topics连接到已存在的应用程序或者数据系统。比如,连接到一个关系型数据库,捕捉表(table)的所有变更内容。

Apache RocketMQ

 http://rocketmq.apache.org/

  • 由Alibaba提交到 Apache
  • RocketMQ 出现原因:在早期阶段,alibaba构建了基于ActiveMQ 5.x的分布式消息中间件(5.3之前)。alibaba的跨国业务将其用于异步通信,搜索,社交网络活动流,数据管道,甚至在其交易流程中。随着alibaba的贸易业务吞吐量的增加,源自alibaba的消息传递集群的压力也变得迫切。
  • RocketMQ vs. ActiveMQ vs. Kafka

       参考:http://rocketmq.apache.org/docs/motivation/

  • 没有在 mq 核心中去实现JMS等接口,有些系统要迁移需要修改大量代码

 ZeroMQ

http://zeromq.org/

基于c语言开发的主要为C语言设计,也支持PHP,Java,Python,Lua,Haxe.不支持持久化消息


RabbitMQ

https://www.rabbitmq.com/ 

由戴尔旗下的软件公司Pivotal设计,Pivotal(https://pivotal.io/cn/)你可能没用听过,spring就是由Pivotal公司设计。

由Erlang 语言开发,并发性能很好 

异步消息支持多种消息传递协议,消息队列,传递确认,灵活路由到队列,多种交换类型。


如何选择?

通过以上分析只剩下RabbitMQ和RocketMQ

二次开发角度 :RocketMQ

  • RabbitMQ二次开发比较困难些因为是Erlang语言开发
  • RocketMQ java编写
  • Alibaba当初MQ选择方案中没用RabbitMQ我觉得就是这个原因

成熟度:RabbitMQ

  • RabbitMQ:2008-7-30发布第一个版本
  • RocketMQ:2017-2-7发布第一个版本 

你可能感兴趣的:(MQ消息队列简介)