博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
消息中间件对比
阅读量:5898 次
发布时间:2019-06-19

本文共 1392 字,大约阅读时间需要 4 分钟。

hot3.png

一、JMS

1:先了解什么是JMS:JMS(Java Messaging Service)是Java平台上有关面向消息中间件(MOM)的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发,翻译为Java消息服务。

2:JMS消息通常有两种类型:

A: 点对点(Point-to-Point)。在点对点的消息系统中,消息分发给一个单独的使用者。点对点消息往往与队列(javax.jms.Queue)相关联。
B:发布/订阅(Publish/Subscribe)。发布/订阅消息系统支持一个事件驱动模型,消息生产者和消费者都参与消息的传递。生产者发布事件,而使用者订阅感兴趣的事件,并使用事件。该类型消息一般与特定的主题(javax.jms.Topic)关联。

二、开源消息中间件(ActiveMQ,Kafka)

1、ActiveMQ
A:完全支持JMS规范,号称最受欢迎,最为强大的消息中间件,尽管某些方面实际并不强大。。。
B:支持多种语言客户端:Java, C, C++, C#, Ruby, Perl, Python, PHP
C:支持消息集群,虚拟目的地,通配符,组合目的地等高级特性。
D:支持Spring
E:支持协议可插拔: in-VM, TCP, SSL, NIO, UDP, multicast, JGroups and JXTA transports
F:支持使用JDBC进行快速持久化(使用mysql实际也不快,支持约500次写入/每秒)
G:支持CXF,Axis,Ajax
H:消费者消费消息通过服务端推送方式进行,offeset由服务端维持
2、Kafka
A:它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。
B:支持多种语言客户端:Java,Python,C,C++,.net,Ruby,Perl,PHP,Clojure,Go,Node.js等等
C:支持服务端和消费者集群;offset由消费者维护,可以通过控制offset控制对以前消息的消费;消息存储在磁盘,顺序读写,可以设置过期时间
D:支持分区,可以设置复制因子进行容灾,kafka自身主从复制机制可确保高可用
E:用户可自行实现分区路由规则,确保同类消息只落在某一个分区。
F:通过消费者集群设置可实现队列模式和发布-订阅模式,这种设计也便于灵活扩展和容灾
G:传统消息中间件在多消费者模型中无法很好的保证消费的顺序性,但kafka可以通过分区保证
H:kafka具有高吞吐,高可用,低延时的特性,7200r/s的磁盘可写100M/s
I:适用场景:页面浏览实时数据采集,实时监控,日志收集等
J:Offset可存储在zk或者kafka,如果网络异常有出现重复消费的可能性,需要开发者自行保证幂等性
K:kafka可以通过ACK确保不丢消息,但可能会带来消息的重复发送问题
L:kafka通过批量消息处理,零拷贝,端到端批量压缩等技术来提升效率
M:有较为健全的监控机制,可通过KafkaOffsetMonitor或者KafkaWebConsole监控。也可以通过JMX自定义进行自动监控。

转载于:https://my.oschina.net/sunney888/blog/706462

你可能感兴趣的文章
谈一谈Spring-Mybatis在多数据源配置上的坑
查看>>
【精益生产】车间现场管理的八大浪费
查看>>
关于阿里开发者招聘节 |这5道笔试真题 你会吗!???
查看>>
C#的异常处理机制
查看>>
vsftp:500 OOPS: could not bind listening IPv4 sock
查看>>
Linux安装BTCPayServer并设置比特币BTC和Lightning支付网关
查看>>
Python 的 with 语句
查看>>
mysql安装,远程连接,以及修改密码
查看>>
Mybatis查询返回Map类型数据
查看>>
java的深拷贝与浅拷贝
查看>>
程序员如何提高工作效率
查看>>
promise
查看>>
将Java应用部署到SAP云平台neo环境的两种方式
查看>>
==与equal的区别
查看>>
数据批量导入Oracle数据库
查看>>
调用lumisoft组件发邮件 不需要身份验证 不需要密码
查看>>
DW 正则
查看>>
抓屏原理
查看>>
ASP.NET Web API自身对CORS的支持: EnableCorsAttribute特性背后的故事
查看>>
UNIX网络编程读书笔记:TCP输出、UDP输出和SCTP输出
查看>>