当前位置:网站首页>RebatMq消息中间件(一) 各个中间件介绍
RebatMq消息中间件(一) 各个中间件介绍
2022-08-09 22:50:00 【谁是黄黄】
一.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 切换开销。
六.各个中间件的比较
边栏推荐
- 探索TiDB Lightning源码来解决发现的bug
- 数字钱包红海角逐,小程序生态快速引入可助力占领智慧设备入口
- [Cloud native] Kubernetes orchestration tools
- Has your phone ever been monitored?
- 力扣:322. 零钱兑换
- 什么是平面文件数据库? 如何导入多种格式的文件:DSV、JSON、XML?
- 软考 --- 软件工程(7)软件项目管理(下)
- JS基础笔记-关于对象
- 数据库优化 | 干货
- [Interface Test] Decoding the request body string of the requests library
猜你喜欢
【SSL集训DAY3】控制棋盘【二分图匹配】
2022-08-09 mysql/stonedb-子查询性能提升-概论
YOLOV5 study notes (7) - training your own data set
【集训DAY4】异或【字典树】
【云原生】一文讲透Kubevela addon如何添加腾讯Crane
61.【快速排序法详解】
首席信息官如何将可持续性和技术结合起来
Digital wallets, red sea ecological rapid introduction of small programs can help capture device entry wisdom
【云原生】Kubernetes编排工具精讲
How to match garbled characters regularly?
随机推荐
【JZOF】82二叉树中和为某一值的路径(一)
The latest "Grain Academy Development Tutorial" in 2022: 10 - Front-end payment module
Sqlserver restricts the ip under which accounts can access the database
68. qt quick-qml multi-level folding drop-down navigation menu supports dynamic add/unload, support qml/widget loading, etc.
[Cloud Native] This article explains how to add Tencent Crane to Kubevela addon
ES6 从入门到精通 # 15:生成器 Generator 的用法
framework源码读后感
【哲理】读书的意义
2022年最新《谷粒学院开发教程》:10 - 前台支付模块
[JZOF] 82 binary tree with a path of a certain value (1)
阿里云短信服务开通
【诗歌】被讨厌的勇气
【集训DAY3】阶乘【数学】
2022-08-09 mysql/stonedb-慢SQL-Q16分析
《GB5084-2021》PDF下载
【C语言】指针和数组的深入理解(第四期)
Golden Warehouse Database KingbaseGIS User Manual (6.6. Geometric Object Verification Function, 6.7. Spatial Reference System Function)
你的手机曾经被监控过吗?
70. Stair Climbing Advanced Edition
Snap: 322. Change of Change