JMS与消息队列

  JMS,Java Message Service,即Java消息服务。

  MOM,Message Oriented Miiddleware的英文缩写,指的是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。

  JMS是Java的一套API标准,最初的目的是为了使应用程序能够访问现有的MOM系统,后来被许多现有的MOM供应商采用,并实现为MOM系统。

  常见的MOM系统有Apache的ActiveMQ、BEA的RabbitMQ、阿里巴巴的RocketMQ、IBM的MQSeries、Microsoft的MSMQ,但并非所有的MOM系统都遵循JMS规范。

  基于JMS实现的MOM,又称为JMS Provider。

  “消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串,也可以很复杂,可能包含嵌入对象。

  消息被发送到队列中。“消息队列”是消息在传输过成功保存消息的容器。消息管理器在将消息从它的源中继到它的目标时充当中间人。队列的目的是提供路由并保证消息的传递。如果发送消息时接受者不可用,消息队列会保存消息,直到可以成功的传递它。

  消息队列的主要特点是异步处理,主要目的是减少请求响应时间和解耦。所以主要的使用场景就是将比较耗时并且不需要即使(同步)返回结果的操作作为消息放入消息队列。同时由于使用了消息队列,只要保证消息格式不变,消息发送方和消息接受方并不需要彼此联系,也不需要受对方的影响,即解耦。

  跨系统的异步通信,所有需要异步交互的地方都可以使用消息队列,就像除了我们打电话(同步)以外,还可以使用发短信、电子邮件等异步通信方式。

  多个应用之间的耦合,由于消息时平台无关和语言无关的,而且语义上也不再是函数调用,因此更适合做多个应用之间松耦合的接口。基于消息队列的耦合,不需要发送方和接收方同时在线。

  在EAI(企业应用集成)中,文件传输、共享数据库、消息队列、远程过程调用都可以作为集成的方法。

  应用内的同步变异步,比如订单处理,就可以由前端应用将订单信息放到队列,后端应用从队列里依次获得消息处理,高峰时的大量订单就可以积压在队列里慢慢处理掉。由于同步通常意味着阻塞,而大量线程的阻塞会降低计算机的性能。

  EDA(消息驱动的架构),系统分解为消息队列、消息制造者和消息消费者,一个处理流程可以根据需要拆成对个Stage(阶段),阶段之间使用队列连接起来,前一个阶段处理的结果放入队列,后一个阶段从消息队列中获取消息继续处理。

  应用需要更灵活的耦合方式,如发布订阅,比如可以指定路由规则。

  跨局域网,甚至跨城市的通讯,比如北京机房与广州机房的应用程序的通信。

原文地址:https://www.cnblogs.com/guanghe/p/10979599.html

时间: 2024-08-26 12:33:02

JMS与消息队列的相关文章

lesson5:利用jmeter来压测消息队列(activemq)

本文讲述了利用jmeter来压测消息队列,其中消息队列采用apache的activemq,jmeter本身是支持符合jms标准消息队列的压测,由于jmeter的官方sampler配置比较复杂,本文直接使用sdk的方式来压测,与生产实际使用更加接近,各位如对官方的sampler感兴趣,可以自行去配置完成. 准备工作:下载activemq 地址:http://activemq.apache.org 本文中的activemq采用的是5.9.0版本. jMetterLessons工程源码地址:https

消息总线VS消息队列

前段时间实现了一个基于RabbitMQ的消息总线,实现的过程中自己也在不断得思考.总结以及修正.需要考虑各个维度:效率.性能.网络.吞吐量.甚至需要自己去设想API可能的使用场景.模式.不过能有一件事情,自己愿意去做,在走路.吃饭.坐公交的时候都在思考如何去改进它,然后在实践的过程中,促使去思考并挖掘自己知识面的空白,也是一件让人开心的事情. 借此记录下自己在实现的过程中,以及平时的一些想法. 这是第一篇,先谈谈消息总线跟消息队列的区别,以及对于企业级应用需要将消息队列封装成消息总线的必要性.

使用消息队列异步化系统

使用消息队列异步化系统 基于Spring与ActiveMQ的配置实现方案 前言 前期为了快速开发,项目结构较为混乱,代码维护与功能扩展都比较困难,为了方便后续功能开发,最近对项目进行的重构,顺便在重构的过程中将之前的部分操作进行了异步处理,也第一次实际接触了JMS与消息队列.项目中采用的消息中间件为ActiveMQ. 什么是JMS Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分

Java消息队列--JMS概述

1.什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信.Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持(百度百科给出的概述).我们可以简单的理解:两个应用程序之间需要进行通信,我们使用一个JMS服务,进行中间的转发,通过JMS 的使用,我们可以解除两个程序之间的耦合. 2.JMS的优势 Async

JMS消息队列ActiveMQ(点对点模式)

生产者(producer)->消息队列(message queue) package com.java1234.activemq; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Session

自己动手实现消息队列之JMS

什么是JMS?JMS的诞生史? 在JMS还没有诞生前,每个企业都会有自己的一套内部消息系统,比如项目组A需要调用到项目组B的系统,项目组B也有可能会调用到项目组C的系统.这样每个公司都有自己的一套实现.很不规范,所以Apache基金会,为企业消息产品专门定义了一套规范.我们可以把JMS当作是一系列接口及相关语义的集合,通过这些接口和语义定义了JSM客户端如何去访问消息系统.简单点来说就是JMS主要干了两件事,定义通用的消息格式,和消息传递的模式. 体系结构 JMS由以下元素组成.[1] JMS提

JMS消息队列ActiveMQ(发布/订阅模式)

消费者1(Consumer)--订阅(subcribe)-->主题(Topic) package com.java1234.activemq2; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageConsumer; import javax.jms.

Flume 读取JMS 消息队列消息,并将消息写入HDFS

利用Apache Flume 读取JMS 消息队列消息.并将消息写入HDFS,flume agent配置例如以下: flume-agent.conf #name the  components on this agent agentHdfs.sources  = jms_source agentHdfs.sinks =  hdfs_sink agentHdfs.channels  = mem_channel #  Describe/configure the source agentHdfs.s

java JMS消息队列

http://blog.csdn.net/shirdrn/article/details/6362792 http://haohaoxuexi.iteye.com/blog/1893038 http://afreon.blog.163.com/blog/static/223794094201431422654237/ http://www.cnblogs.com/huang0925/p/3558690.html ActiveMQ第二弹:使用Spring JMS与ActiveMQ通讯 本文章的完整