一、JMS的关键词
1、 跨服务器:专业术语好像叫“跨实例”。意思是,可以在多个服务器(可以是不同的服务器,如 resin 与 tomcat )之间相互通信。与之对应的是单服务器版。
2、 消息生产者:就是专门制造消息的类。
3、 消息消费者:也叫消息接收者,它主要是实现了消息监听的一个接口,当然,也可以难过 Spring 提供的一个转换器接口指定任意一个类中的任意方法。
二、认识JMS
JMS 模块的功能只提供了接口,并没有给予实现,实现 JMS 接口的消息中间件叫 JMS Provider ,这样的消息中间件可以从 Java 里通过 JMS 接口进行调用。
JMS 消息由两部分构成: header 和 body 。 header 包含消息的识别信息和路由信息, body 包含消息的实际数据。
JMS 的通用接口集合以异步方式发送或接收消息 。另外, JMS 采用一种宽松结合方式整合企业系统的方法,其主要的目的就是创建能够使用跨平台数据信息的、可移植的企业级应用程序,而把开发人力解放出来。
Java 消息服务支持两种消息模型: Point-to-Point 消息 ( 即 P2P) 和发布订阅消息( Publish Subscribe messaging ,简称 Pub/Sub ,也就是广播模式)。
根据数据格式, JMS 消息可分为以下五种:
BytesMessage 消息是字节流。
MapMessage 消息是一系列的命名和值的对应组合。
ObjectMessage 消息是一个流化 ( 即继承 Serializable) 的 Java 对象。
StreamMessage 消息是 Java 中的输入输出流。
TextMessage 消息是一个字符串,这种类型将会广泛用于 XML 格式的数据。
三、使用JMS
1 、建立消息连接(也就是建立连接工厂);
2 、设定消息目的地 ( 其实与步骤 1 中用的类是一样的,只是它是用来指定目的地,而步骤 1 中是用来指定消息服务器地址的 ) ;
3 、创建 jmsTemplate 实例(为下一步构建消息 sessin 作准备);
4 、创建消息生产者(其中就用到了 2 、 3 两步的产物),它就是一个普通的类,一般是通过 send 方法发送消息,也可以通过 MessageListenerAdapter 指定发送信息的方法;
5 、创建 MDP (也就是消息接收者,它是一个必须实现 MessageListener 接口的类);
6 、为每个 MDP 建立一个监听容器,当有相应的消息传来,则它会自动调用对应的 MDP 消费消息。
整个过程就像编写 JDBC 一样,代码维护量很大。为此,让 Spring 对其进行管理是个不错的选择。
四、JMS与Spring
1. 提供 JMS 抽象 API ,简化了访问目标(队列或主题)和向指定目标发布消息时 JMS 的使用。
2. 开发人员不需要关心 JMS 不同版本(例如 JMS 1.0.2 与 JMS 1.1 )之间的差异。
3. 开发人员不必专门处理 JMS 异常,因为 Spring 为所有 JMS 异常提供了一个未经检查的异常,并在 JMS 代码中重新抛出
五、为什么使用JMS
- 它可以把不影响用户执行结果又比较耗时的任务(比如发邮件通知管理员)异步 的扔给JMS 服务端去做,而尽快的把屏幕返还给用户。
- 服务端能够多线程排队响应高并发的请求,并保证请求不丢失。
- 可以在Java世界里达到最高的解耦。客户端与服务端无需直连,甚至无需知晓对方是谁、在哪里、有多少人,只要对流过的信息作响应就行了,在企业应用环境复杂时作用明显。