你的位置:首页 > Java教程

[Java教程]JMS学习(一)基本概念


这两天面试了一两个公司,由于简历中的最近一个项目用到了JMS,然而面试官似乎对这个很感兴趣,所以都被问到了,但可惜的是,我除了说我们使用了JMS外,面对他们提出的一些关于JMS的问题,我回答得相当差,直接结果就是面试失败。同时我也深深的觉得自己对于技术的掌握是多么的浮浅,本着从哪里跌倒就从哪里爬起来的心态,决定首先好好研究一下JMS。不仅是为面试,也是为了尽可能深入的掌握这个框架。

本文主要介绍一些基本的概念。

 

  • 一、JMS介绍

  JMS是Java Message Service 的简称,即Java消息服务。什么是消息服务呢,我们来看一下Oracle官方的定义:

  The Java Message Service (JMS) API is a messaging standard that allows application components based on the Java Platform Enterprise Edition (Java EE) to create, send, receive, and read messages. It enables distributed communication that is loosely coupled, reliable, and asynchronous.

      翻译过来就是说,JMS是一个消息标准,这种标准允许基于JavaEE的应用组件可以创建,发送,接受及读取消息。通过JMS可以实现松耦合,可依赖及异步的分布式通信。那么在这一段话中我们应该注意两点,即首先这是一个标准,类似于Servlet标准,并不是一个具体的实现。其次,这是一种分布式的通信机制,并且是异步的。

  • 二、版本

      以前没有注意过这个问题,但是没想到在面试时居然被问题到了,问我们JMS协议使用的是哪个版本,回来查来下,JMS历史上原来有两个比较重要的版本。一个是JMS1.1,另一个就是JMS2.0。那么这两个版本之间有什么区别呢?从网上找了一下答案,整理如下 :

     1. 简化的API: JMS2.0 提供了一些简化的API,可以简化代码编写,以便于我们更方便的创建生产者消费者等内容。具体来说就是使用了JDK1.7的新语法

     2. 简化配置:配置变得更方便

     3. 支持多个消费者共享Topic:,这一点很重要,因为我的项目中使用的是Topic,面试官问到说如何让多个Node不重复的消费同一个Topic的消息,其实,通过Topic共享就可以做到,这就是JMS2.0提供的特性,当然,1.1的话,通过selector好像是也可以做到。

      4. JMSXDeliveryCount值必须设置:这个值代表重试次数,正常来说是1,如果值大于1,则表示重发了多次。

 

      那么,目前我们常用的MQ都支持哪个版本呢?以ActiveMQ为例来说,其官方文档的说明如下:

      Apache ActiveMQ is fast, supports many Cross Language Clients and Protocols, comes with easy to use Enterprise Integration Patterns and many advanced features while fully supporting JMS 1.1 and J2EE 1.4. Apache ActiveMQ is released under the Apache2.0 License

      看来ActiveMQ还不支持JMS2.0,所以,我们目前使用的JMS的版本仍然还是1.1。那么接下来的系列中,我们还是会以JMS1.1为主来介绍JMS的概念及使用。

  • 三、主要接口介绍(待完成)