全称:Java MessageService 中文:Java 消息服务。
JMS 是 Java 的一套 API 标准,最初的目的是为了使应用程序能够访问现有的 MOM 系 统(MOM 是 MessageOriented Middleware 的英文缩写,指的是利用高效可靠的消息传递机 制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。) ;
后来被许多现有 的 MOM 供应商采用,并实现为 MOM 系统。【常见 MOM 系统包括 Apache 的 ActiveMQ、 阿里巴巴的 RocketMQ、IBM 的 MQSeries、Microsoft 的 MSMQ、BEA 的 RabbitMQ 等。 (并 非全部的 MOM 系统都遵循 JMS 规范)】
基于 JMS 实现的 MOM,又被称为 JMSProvider。
“消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串; 也可以更复杂,可能包含嵌入对象。 消息被发送到队列中。
“消息队列”是在消息的传输过程中保存消息的容器。消息队列管 理器在将消息从它的源中继到它的目标时充当中间人。
队列的主要目的是提供路由并保证消 息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。
消息队列的主要特点是异步处理,主要目的是减少请求响应时间和解耦。所以主要的使 用场景就是将比较耗时而且不需要即时(同步)返回结果的操作作为消息放入消息队列。同 时由于使用了消息队列,只要保证消息格式不变,消息的发送方和接收方并不需要彼此联系, 也不需要受对方的影响,即解耦和。如: 跨系统的异步通信,所有需要异步交互的地方都可以使用消息队列。就像我们除了打电 话(同步)以外,还需要发短信,发电子邮件(异步)的通讯方式。 多个应用之间的耦合,由于消息是平台无关和语言无关的,而且语义上也不再是函数调 用,因此更适合作为多个应用之间的松耦合的接口。基于消息队列的耦合,不需要发送方和 接收方同时在线。 在企业应用集成(EAI)中,文件传输,共享数据库,消息队列,远程过程调用都可以 作为集成的方法。 应用内的同步变异步,比如订单处理,就可以由前端应用将订单信息放到队列,后端应 用从队列里依次获得消息处理,高峰时的大量订单可以积压在队列里慢慢处理掉。由于同步 通常意味着阻塞,而大量线程的阻塞会降低计算机的性能。 消息驱动的架构(EDA),系统分解为消息队列,和消息制造者和消息消费者,一个处 理流程可以根据需要拆成多个阶段(Stage) ,阶段之间用队列连接起来,前一个阶段处理的 结果放入队列,后一个阶段从队列中获取消息继续处理。 应用需要更灵活的耦合方式,如发布订阅,比如可以指定路由规则。 跨局域网,甚至跨城市的通讯,比如北京机房与广州机房的应用程序的通信。
有些业务不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。
在任何重要的系统中,都会有需要不同的处理时间的元素。消息队列通过一个缓冲层来帮助任务最高效率的执行,该缓冲有助于控制和优化数据流经过系统的速度。以调节系统响应时间。
降低工程间的强依赖程度,针对异构系统进行适配。在项目启动之初来预测将来项目会碰到什么需求,是极其困难的。通过消息系统在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口,当应用发生变化时,可以独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。
有些情况下,处理数据的过程会失败。除非数据被持久化,否则将造成丢失。消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列所采用的”插入-获取-删除”范式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用完毕。
因为消息队列解耦了你的处理过程,所以增大消息入队和处理的频率是很容易的,只要另外增加处理过程即可。不需要改变代码、不需要调节参数。便于分布式扩容。
系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。
在大多使用场景下,数据处理的顺序都很重要。大部分消息队列本来就是排序的,并且能保证数据会按照特定的顺序来处理。
在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量无法提取预知;如果以为了能处理这类瞬间峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。
分布式系统产生的海量数据流,如:业务日志、监控数据、用户行为等,针对这些数据流进行实时或批量采集汇总,然后进行大数据分析是当前互联网的必备技术,通过消息队列完成此类数据收集是最好的选择。
特性MQ | ActiveMQ | RabbitMQ | RocketMQ | Kafka |
---|---|---|---|---|
生产者消费者模式 | 支持 | 支持 | 支持 | 支持 |
发布订阅模式 | 支持 | 支持 | 支持 | 支持 |
请求回应模式 | 支持 | 支持 | 不支持 | 不支持 |
Api完备性 | 高 | 高 | 高 | 高 |
多语言支持 | 支持 | 支持 | java | 支持 |
单机吞吐量 | 万级 | 万级 | 万级 | 十万级 |
消息延迟 | 无 | 微秒级 | 毫秒级 | 毫秒级 |
可用性 | 高(主从) | 高(主从) | 非常高(分布式) | 非常高(分布式) |
消息丢失 | 低 | 低 | 理论上不会丢失 | 理论上不会丢失 |
文档的完备性 | 高 | 高 | 高 | 高 |
提供快速入门 | 有 | 有 | 有 | 有 |
社区活跃度 | 高 | 高 | 有 | 高 |
商业支持 | 无 | 无 | 商业云 | 商业云 |
消息服务器,作为server提供消息核心服务
生产者
消息生产者是由会话创建的一个对象,用于把消息发送到一个目的地。
消费者
文章浏览阅读523次。Android分享到微信好友、朋友圈标签: Android开发微信分享2015-11-09 21:41 610人阅读 评论(0) 收藏 举报 分类:Android(9) 版权声明:本文为博主原创文章,未经博主允许不得转载。效果 介绍要实现微信分享,首先请_安卓分享到微信朋友圈和微信好友需要调用api吗
文章浏览阅读3.4k次。百度文库免费下载工具工具下载地址:http://t.cn/E9IYpte
文章浏览阅读836次。JSP 指令是为 JSP 引擎(比如 Tomcat)而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理 JSP 页面中的其余部分。_jsp中memory.giveteststring()是什么意思
文章浏览阅读1.1k次,点赞23次,收藏25次。KL散度的含义_前向kl和反向kl拟合效果的二维多峰分布图解释
文章浏览阅读486次。必备知识:https://docs.djangoproject.com/en/dev/ref/files/storage/#django.core.files.storage.FileSystemStorage https://docs.djangoproject.com/en/dev/ref/request-response/#django.http..._django文件从其他地方上传到数据库
文章浏览阅读946次。转载自九边,九边的力作,符合九边一贯地教育人向上的。虽然博主人到中年,仍然在不断学习,通过以身作则教育孩子,不算逼迫,自认为算“引导”;对于博主来说,九边是博主仰望的。就想文中所说的,希望自己努力的同时,也能乘到风。这两天刘瑜的一篇演讲火了,一些小伙伴可能不知道这人,有那么几年这人挺活跃,写了一套《民主的细节》,我还看了,那时候觉得还不错,后来在美国生活了一段时间,实地体验后,发现她那几本书也同样充满文科知识分子的酸腐味。至于那个演讲,其实还是老调重弹:孩子压力太大,家长逼得太死,还是要给孩子喘息空间。_唯一能稳定遗传的就是财富九边
文章浏览阅读198次。1.特点1.1Zookeeper:一个领导者(leader),多个跟随者(follower)组成的集群1.2集群中只要有半数以上的节点存活,zookeeper集群就能正常服务1.3全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的1.4更新请求顺序执行,来自同一个client更新请求按其发送顺序依次执行1.5数据更新原子性,一次更..._zookepper3.5.8依赖
文章浏览阅读192次。<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body> <button _手写eventemit
文章浏览阅读603次。一.数据库设计123456789101112131415161718192021222324252627282930313233343536373839CREATE TABLE `bg_cate` (`cate_Id` int(30) unsigned NOT NULL AUTO_INCREMENT,`cate_ParentId` int(30) unsigned DEFAULT '0',`cat..._php 显示递归树
文章浏览阅读4.2w次,点赞15次,收藏116次。文章目录Before StartBuild with MavenQuickStart密钥对生成签名验签Before StartSM2算法使用请参考:《GMT 0009-2012 SM2密码算法使用规范 》在bouncycastle - 1.57版本之后,加入了对 我国的SM2、SM3、SM4算法的支持。Bouncycastle releasenotesBuild with Mave..._js java sm2 签名 验签
文章浏览阅读1.2k次。注:防止有不必要的空格,尽量不要复制粘贴1、依据CFCA所提供的CN生成密钥存储文件和密钥对(创建JKS证书库)keytool-genkey-v-aliasslserver-keyalgRSA-keysize1024-keypass111111-dname"cn=duan,ou=某某科技公司,o=某某项目或部门,l=深圳,st=广东,c=cn"-keystoreD:\..._keytool下载linux
文章浏览阅读1.7k次。网络编程多播——MulticastIP多播(也称多址广播或组播)技术,是一种允许一台或多台主机(多播源)发送单一数据包到多台主机(一次的,同时的)的TCP/IP网络技术。通俗点讲,多播也称组播,大概可以理解为分组广播的意思,是介于单播和广播之间的一种通信机制,使用多播方式,可以实现对局域网内一组特定的主机进行通信,对局域网节点分组,加入该分组即可接收该分组的消息,而未加入分组则收不到消息。_ip_multicast_if