你的位置:首页 > Java教程

[Java教程]activemq和jms是种什么关系


JMS是一个用于提供消息服务的技术规范,它制定了在整个消息服务提供过程中的所有数据结构和交互流程。

而activemq则是消息队列服务,是面向消息中间件(MOM)的最终实现,是真正的服务提供者。

jms 的一个标准或者说是一个协议。

通常用于企业级应用的消息传递。

主要有topic 消息(1 对多),queue 消息(1对1)。

activemq 是一个jms 的实现,apache 出的。

 

MQ特点:
MQ的消费-生产者模型的一个典型的代表,一端往消息队列中不断的写入消息,而另一端则可以读取或者订阅队列中的消息。
MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义而MQ则是遵循了AMQP协议的具体实现和产品。

使用场景:
  在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。
  
JMS简介:
  JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API。
  用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
  Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。

  定义:
  JMS(Java Messaging Service)是Java平台上有关面向消息中间件(MOM)的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发,翻译为Java消息服务。
  
  简介:
  JMS是一种与厂商无关的 API,用来访问消息收发系统消息。

它类似于JDBC(Java DatabaseConnectivity):这里,JDBC 是可以用来访问许多不同关系数据库的 API,而 JMS 则提供同样与厂商无关的访问方法,以访问消息收发服务。
许多厂商目前都支持JMS,包括 IBM 的 MQSeries、BEA的 Weblogic JMS service和 Progress 的 SonicMQ,这只是几个例子。
JMS 使您能够通过消息收发服务(有时称为消息中介程序或路由器)从一个 JMS 客户机向另一个JMS客户机发送消息。

  消息是 JMS 中的一种类型对象,由两部分组成:报头和消息主体。
报头由路由信息以及有关该消息的元数据组成。消息主体则携带着应用程序的数据或有效负载。
根据有效负载的类型来划分,可以将消息分为几种类型,它们分别携带:
  简单文本(TextMessage)、可序列化的对象(ObjectMessage)、属性集合(MapMessage)、字节流(BytesMessage)、原始值流(StreamMessage),还有无有效负载的消息(Message)。

JMS和MQ的关系:
  JMS是一个用于提供消息服务的技术规范,它制定了在整个消息服务提供过程中的所有数据结构和交互流程。
而MQ则是消息队列服务,是面向消息中间件(MOM)的最终实现,是真正的服务提供者;MQ的实现可以基于JMS,也可以基于其他规范或标准。
  
支持JMS的开源MQ:
  目前选择的最多的是ActiveMQ。
  ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。
ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

主要特点:
  1. 多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WSNotification,XMPP,AMQP;
  2. 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务);
  3. 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性;
  4. 通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上;
  5. 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA;
  6. 支持通过JDBC和journal提供高速的消息持久化;
  7. 从设计上保证了高性能的集群,客户端-服务器,点对点;
  8. 支持Ajax;
  9. 支持与Axis的整合;
  10. 可以很容易得调用内嵌JMS provider,进行测试;
  11. ActiveMQ速度非常快;一般要比jbossMQ快10倍。

  优点:
  是一个快速的开源消息组件(框架),支持集群,同等网络,自动检测,TCP,SSL,广播,持久化,XA,和J2EE1.4容器无缝结合,并且支持轻量级容器和大多数跨语言客户端上的Java虚拟机。
  消息异步接受,减少软件多系统集成的耦合度。
  消息可靠接收,确保消息在中间件可靠保存,多个消息也可以组成原子事务。
  缺点:
  ActiveMQ默认的配置性能偏低,需要优化配置,但是配置文件复杂,ActiveMQ本身不提供管理工具;
  示例代码少;主页上的文档看上去比较全面,但是缺乏一种有效的组织方式,文档只有片段,用户很难由浅入深进行了解,
  文档整体的专业性太强。在研究阶段可以通过查maillist、看Javadoc、分析源代码来了解。