• RebatMq消息中间件(一) 各个中间件介绍


    一.JMS了解

    1.1什么是JMS

    JMS 全称 Java Message Service,类似于 JDBC不同于 JDBC,JMS 是 JavaEE的消息服务接口,JMS 主要有两个版本:

    1.1
    2.0

    1.两者相比,后者主要是简化了收发消息的代码。
    2.考虑到消息中间件是一个非常常用的工具,所以 JavaEE此制定了专门的规范JMS。
    3.不过和 JDBC 一样JMS 为规范,他只是一套接口,并不包含具体的现,如果们要使用 JMS,那么一般还需要对应的现,这就像使用JDBC 需要对应的驱动一样.

    1.2JMS模型

    JMS 消息服务支持两种消息模型:
    1.点对点或队列模型
    2.发布/订阅模型

    在点对点或队列模型下,一个生产者向一个特定的队列发布消息,一个消费者从该队列中读取消息。里,生产者知道消费者的队列,并直接将消息发送到对应的队列。这是一种点对点的消息模型,这种模式被概括为:

    1.只有一个消费者将获得消息。
    2.生产者不需要在消费者消费该消息期间处于运行状态,消费者也同样不需要在消息发送时处于运行状态,即消息的生产者和消费者是完全解耦的。
    3.每一个成功处理的消息都由消息消费者签收。

    发布者/订阅者模型支持向一个特定的消息主题发布消息,消费者则可以定义自己感兴趣的主题,这是一种点对面的消息模型,这种模式可以被概括为:

    1.多个消费者可以消费消息。
    2.在发布者和订阅者之间存在时间依赖性,发布者需要创建一个订阅(subscription),以便客户能够订阅;订阅者必须保持在线状态以接收消息;当然,如果订阅者创建了持久的订阅,那么在订阅者未连接时,消息生产者发布的消息将会在订阅者重新连接时重新发布。

    1.2 JMS实现

    开源的支持 JMS 的消息中间件有:

    Kafka
    Apache ActiveMQ
    JBoss 社区的 HornetQ
    Joram
    Coridan 的 MantaRay
    OpenJMS

    一些商用的支持 JMS 的消息中间件有:

    WebLogic Server JMS
    EMS
    GigaSpaces
    iBus
    IONA JMS
    IQManager(2005 年 8 月被Sun Microsystems并购)
    JMS+
    Nirvana
    SonicMQ
    WebSphere MQ

    日常开发接触较多的,可能就 是 Kafka 和 ActiveMQ。

    三.RabbitMQ

    3.1 RabbitMQ 了解

    支持 AMQP、XMPP、SMTP、STOMP 等多种协议,功能强大,适用于企业级开发。

    在这里插入图片描述

    3.2 RocketMQ 特点:

    1.保证严格的消息顺序。
    2.提供针对消息的过滤功能。
    3.提供丰富的消息拉取模式。
    4.高效的订阅者水平扩展能力。
    5.实时的消息订阅机制。
    6.亿级消息堆积能力

    3.3 RabbitMQ的安装

    安装 RabbitMQ 直接用Docker,

    1.进入官网https://hub.docker.com/
    2.搜索在这里插入图片描述
    3.在这里插入图片描述
    4.在这里插入图片描述
    5.更改配置
    #有两个默认端口
    15672管理界面
    5672通信
    docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management

    4.Kafka

    4.1 Kafka的由来

    Kafka 是 Apache 下的一个开源流处理平台,由Scala 和 Java 编写。Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作(网页浏览,搜索和其他用户的行动)流数据。Kafka 的目的是通过 Hadoop 的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。

    4.2 Kafka的特性

    1.快速持久化:通过磁盘顺序读写与零拷贝机制,可以在O(1)的系统开销下进行消息持久化。
    2.高吞吐:在一台普通的服务器上既可以达到10W/s 的吞吐速率。
    3.高堆积:支持 topic 下消费者较长时间离线,消息堆积量大。
    4.完全的分布式系统:Broker、Producer,Consumer 都原生自动支持分布式,通过 Zookeeper 可以自动实现更加复杂的负载均衡。
    5.支持 Hadoop 数据并行加载。

    五 . ZeroMQ

    5.1 ZeroMQ的了解

    ZeroMQ 号称最快的消息队列系统,它专门为高吞吐量/低延迟的场景开发,在金融界的应用中经常使用,偏重于实时数据通信场景。ZeroMQ 不是单独的服务,而是一个嵌入式库,它封装了网络通信、消息队列、线程调度等功能,向上层提供简洁的 API,应用程序通过加载库文件,调用 API 函数来实现高性能网络通信。

    5.2 ZeroMQ的特性

    ZeroMQ 的特性:

    1.无锁的队列模型:对于跨线程间的交互(用户端和 session)之间的数据交换通道 pipe,采用无锁的队列算法 CAS,在 pipe 的两端注册有异步事件,在读或者写消息到 pipe 时,会自动触发读写事件。
    2.批量处理的算法:对于批量的消息,进行了适应性的优化,可以批量的接收和发送消息。
    3.多核下的线程绑定,无须 CPU 切换:区别于传统的多线程并发模式,信号量或者临界区,ZeroMQ 充分利用多核的优势,每个核绑定运行一个工作者线程,避免多线程之间的 CPU 切换开销。

    六.各个中间件的比较

    在这里插入图片描述

  • 相关阅读:
    springboot+篮球场馆预约系统 毕业设计-附源码211706
    【C++11】线程库
    外链建设如何进行?
    第四十五章 开发自定义标签 - 规则和操作
    9.30消息队列实现进程之间通信方式代码,现象
    厉害了!阿里内部都用的Spring+MyBatis源码手册,实战理论两不误
    FFMPEG常用的一些命令介绍:音频录制、视频录制
    LeetCode_59_螺旋数组Ⅱ
    求最大公约数
    leetcode-268.丢失的数字
  • 原文地址:https://blog.csdn.net/weixin_43189971/article/details/126248788