学习了李刚的javaEE企业应用实战,做了有关笔记和思考。
JMS消息
一JMS消息对象
1.不管哪种消息对象,它都是Message接口的实例,它包含标准的消息头,可扩
展的消息属性,消息主体内容。而其中的消息头、消息属性本质上都是一系列的
key-value对,而其区别就在于消息头的所有key都是标准的、固定的,而消息属
性则是我们可以自己定义的。我们通过
setXxxProperty(String name,xxx
value);
来设置属性。
2.重用消息对象:为什么可以重用消息对象?这是因为使用send()方法发送消息
时,会把有关消息的数据复制到一个内部缓冲中,一旦send()方法调用完成,我
们就可以重新使用Message了,而不必担心原来的数据还没有发出去就被覆盖。
对于JMS消息消费者来说,消息是只读的。这就好像是别人发来的邮件,或是别
人在BBS上发表的主题,我们不能修改一样。
3.JMS消息传递方式和有效时间。
sender.setDeliveryMode(DeliveryMode.PERSISTENT);
sender.setTimeToLive(20000);
传递模式中的持久化的意思是在发送之前,先把消息存储在数据库或文件中,而
这个有效期就代表这个消息能够存储多长时间。
4.设置消息的优先级,
MessageProducer sender = session.createProducer(dest);sender.setPriority(9);
首先这个优先级有0到9之分,数字越大优先级
越高,第二,这个设置的是消息生产者的默认优先级,第三,如果我们不设置优
先级的话,那么它就默认为4。最后,我们也可以设置某次传输的优先级或者说
传输模式,如sender.send(msg,DeliveryMode.PERSISTENT,3,15000);
5.消息的确认方式,AUTO_ACKNOWLEDGE,自动确认,还有其他的方式,这里不再
赘述。
6.消息选择器,什么是消息选择器,我的理解是,消息消费者用他们选择他们感
兴趣的消息。
createConsumer(Destination dest,String messageSelector);
根
据指定的消息目的来创建一个消息消费者。这个消息选择器的表达式是一个
SQL-92的字符串表达式。
7.消息的临时目的:为了动态创建消息目的,我们使用消息的临时目的,客户端
在使用时临时创建,客户端退出时删除。消息目的的一个使用场景就是将
JMSReplayTo消息头设为临时创建的消息目的,当JMS消费者收到消息后,向该临
时消息目的返回一个响应。这个JMSReplayTo就相当于消息发送地址。
二.使用队列浏览器查看全部消息,createBrowser(Queue queue);根据指定的队
列来创建一个队列浏览器。
createBrowser(Queue queue,String
messageSelector)
。典型的用法是:
QueueBrowser browser = session.createBrowser((javax.jms.Queue)dest);
Enumeration em = browser.getEnumeration();
while(em.hasMoreElements){
TextMessage msg = (TextMessage)em.nextElement;
System.out.println(msg.getText());
}
三.JMS和事务
JMS提供两种事务控制方式,使用事务性的session,在JTA全局事务中使用JMS。
1消息生产者发送的消息会被缓存,在事务被提交之前,消息消费者不会接受到
任何未提交的消息,当消息生产者完成一次业务逻辑之后,消息生产者执行提交
事务,之前所有发送的消息才会被整体性地传递到消息消费者,如果事务回滚,
JMS服务器会直接丢弃所有缓存的消息。而对于消息消费者,在接收到并处理多
个消息成功之后,消息消费者提交事务,此时才会向消息生产者确认之前收到的
所有消息。如果事务回滚,JMS服务器会把所有消息退还给相关的消息队列和消
息主题。这里要注意,使用事务性session时,只是控制有关JMS的操作成为一个
整体,而如果要把有关EJB的操作,数据库的操作和JMS的操作都看成是一个整体
的话,我们就要使用JTA全局事务。
2.JTA全局事务,
什么是JTA,JTA,即Java Transaction API,译为Java事务API。我的理解是,
JTA允许两个或多个网络计算机上的java平台的组件参与到一个JTA事务中。
在JMS中如何使用?通过JNDI查找来获得JTA服务器的引用。如:
UserTransaction tx = (UserTransaction)ctx.lookup("javax.transaction.UserTransaction");
tx.begin();
...
tx.commit();
四JMS服务器的异常监听
如果JMS服务器异常了,那么JMS客户端就无法收到这些异常的信息,那么为了让
JMS客户端可以接收到JMS服务器上的异常信息。JMS提供一种异常监听器机制。
异常监听器需要实现javax.jms.ExceptionListener接口,实现该接口需要实现
onException方法。
conn.setException(new ExceptionListener
public void onException(javax.jms.Exception){
//此处获得JMS服务器上的异常信息
}
);
但要注意这里只是监听服务器上的异常,并不监听消息生产者的异常。
五JMS集群
什么是JMS集群,我的理解是将JMS的消息目的分散到不同的服务器节点,当某个
服务器节点或某个服务器消息目的瘫痪时,JMS客户端就会收到JMS目的发生异常
的信息,这样,JMS客户端可以自动切换消息目的到其他服务器节点的消息目的
。此外使用JMS集群也可以利用服务器集群的负载均衡提高稳定性。
分享到:
相关推荐
**JMS消息队列机制详解** Java Message Service(JMS)是Java平台中用于企业级应用间异步通信的一种标准接口。它定义了生产、发送、接收和读取消息的标准API,使得不同的消息中间件提供商可以提供兼容的实现,便于...
2. 创建队列接收类:创建队列接收类是监听 JMS 队列并接受消息的第二步,队列接收类是 JMS 消息的接收者。 监控 JMS 队列 监控 JMS 队列需要按照以下步骤进行: 1. 创建 Web 项目:创建 Web 项目是监控 JMS 队列...
JMS-java message Service ,消息队列原理介绍,适合activeMQ开发使用
### JMS 教程 - 消息队列、消息服务 #### 企业级消息传递与JMS概述 在深入探讨JMS(Java消息服务)之前,我们先来了解下消息服务的基本概念及其在企业级应用中的重要性。企业级消息传递(Enterprise Messaging)是...
Java实现的基于JMS(Java Message Service)协议的消息队列中间件是一种用于应用程序间异步通信的重要技术。消息队列允许应用程序将消息发送到队列而不必等待接收方的响应,提高了系统的可扩展性和容错性。JMS是Java...
标题“JMS调用IBM MQ监听模式”涉及的是Java消息服务(Java Message Service,简称JMS)与IBM WebSphereMQ(通常简称为IBM MQ)之间的交互,特别是在消息监听模式下的应用。这种模式允许应用程序被动地接收来自MQ的...
此外,学习如何在各种异常情况下保证消息的正确处理,如消息丢失或重复,也是JMS应用的关键。 通过阅读《有关JMS的一点看法》、《Apache Geronimo的JMS实现:ActiveMQ》等文章,我们可以深入理解JMS的使用场景、优...
这篇"ActiveMQ学习笔记之九--发送消息到队列中"主要探讨的是如何通过编程方式向ActiveMQ队列发送消息,这对于理解和应用消息中间件至关重要。 首先,我们要理解ActiveMQ中的队列(Queue)概念。队列是一种先进先出...
**JMS学习笔记(一)——JMS简介与ActiveMQ安装** Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的标准接口。它为应用程序提供了一种标准的方式,用来创建、发送、接收和读取...
总结起来,"JMS之Spring + ActiveMQ实现消息队列"涉及到的关键知识点包括:Spring框架的JMS支持、ActiveMQ的使用、ConnectionFactory的配置、JmsTemplate和MessageListener的实现,以及消息队列在解决系统解耦和异步...
### 消息队列Activemq学习笔记 #### MQ入门概述 消息队列(Message Queue,简称MQ)是一种用于在应用程序之间传递数据的机制。它允许应用之间通过发送消息进行通信,而无需直接调用对方。 ##### 前言:MQ=消息...
4. **使用事务**:在需要保证消息顺序和一致性的场景下,可以使用JMS事务来控制消息的提交和回滚。 5. **实现消息监听器**:注册监听器,当有新消息到达时,监听器会被自动触发,处理消息。 总结起来,ActiveMQ的...
通过配置`ConnectionFactory`、`JmsTemplate`和消息监听器,我们可以方便地实现消息的发送和接收,从而提高系统的可扩展性和解耦性。同时,Spring提供的事务管理和异步处理功能进一步增强了JMS的实用性。在实际项目...
- **事务**:在JMS会话中,可以使用事务确保消息的一致性。 - **消息选择器**:允许消费者只接收满足特定条件的消息。 - **JMS管理**:通过JMX(Java Management Extensions)管理JMS资源。 通过理解并熟练掌握上述...
消息队列是一种应用系统之间进行异步通信的中间件,它的核心功能是实现不同应用之间的信息传递,它在软件工程中常用于解耦服务、提高系统伸缩性以及保证消息传递的可靠性和顺序性。在当今分布式系统架构中,消息队列...
在本篇ActiveMQ学习笔记中,我们将探讨JMS(Java Message Service)与Spring框架的集成。JMS是一种标准API,用于在分布式环境中进行异步消息传递,而Spring框架则为开发人员提供了强大的依赖注入和管理服务的能力。...
本文主要探讨的是消息中间件(Message-Oriented Middleware,简称MOM),特别是在Java消息服务(Java Message Service,JMS)的学习笔记。 JMS是Java平台上的一个标准API,用于在分布式环境中进行异步消息传递。它...
2. **JMS Messages**:JMS定义了消息的接口,包括各种类型的消息,如文本消息、对象消息等。客户端通过这些接口与提供者交互,发送和接收消息。JMS的目标是让客户端不依赖于提供者的特定实现,保持消息的通用性和...
在**学习笔记** 中,可能详细记录了学习JMS的过程,包括理解JMS的基本概念、设置开发环境、编写代码示例、遇到的问题及解决策略,还有可能对如何应用JMS在实际项目中进行了探讨。 通过阅读**jms学习笔记.docx** 和 ...