2. JmsAccessor
抽象类JmsAccessor是JmsTemplate,JmsDestinationAccessor,AbstractJmsListeningContainer扩展类的基类,提供了创建Connection和Session的方法。
protected Connection createConnection() throws JMSException {
return getConnectionFactory().createConnection();
}
protected Session createSession(Connection con) throws JMSException {
return con.createSession(isSessionTransacted(), getSessionAcknowledgeMode()); //默认为Session.AUTO_ACKNOWLEDGE模式
}
JmsAccessor还提供了通用的一些JMS属性:
private ConnectionFactory connectionFactory;
private boolean sessionTransacted = false;
private int sessionAcknowledgeMode = Session.AUTO_ACKNOWLEDGE;
2.1 JmsDestinationAccessor
抽象类JmsDestinationAccessor继承JmsAccessor类,提供了对指定目的地名转换为JMS地址的封装。
protected Destination resolveDestinationName(Session session, String destinationName) throws JMSException {
return getDestinationResolver().resolveDestinationName(session, destinationName, isPubSubDomain());
}
2.2 AbstractJmsListeningContainer
AbstractJmsListeningContainer是所有Message Listener Container的基类,提供了JMS Connection的生命周期管理功能。
private String clientId;// JMS client id
private boolean autoStartup = true; //当应用程序重新配置的时候是否自动启动
private Connection sharedConnection;//共享JMS Connection连接
protected abstract boolean sharedConnectionEnabled();//决定是否使用共享的JMS Connection。
2.3 AbstractMessageListenerContainer
AbstractMessageListenerContainer继承AbstractJmsListeningContainer类,也是Message Listener Container的基类。
private volatile Object destination;//指定接收消息的目的地。
private volatile Object messageListener;//指定处理消息的listener。
private boolean exposeListenerSession = true;
这里的messageListener可以是标准的JMS消息监听对象(javax.jms.MessageListener),也可以是Spring特有的的JMS监听对象(org.springframework.jms.listener.SessionAwareMessageListener)。
看一下SessionAwareMessageListener中监听器接口的定义:
public interface SessionAwareMessageListener {
void onMessage(Message message, Session session) throws JMSException;
}
与标准的JMS消息监听对象相比
public interface SessionAwareMessageListener {
void onMessage(Message message) throws JMSException;
}
增加了Session的参数,表示可以通过此session发送回复的消息。
如果使用了SessionAwareMessageListener 类型的message listener,那么exposeListenerSession参数指定了传入onMessage方法的session参数是否是创建了MessageConsumer的session,默认值是true。如果是false,那么AbstractMessageListenerContainer会在connection上新建一个session,并传入onMessage方法。
protected void doInvokeListener(SessionAwareMessageListener listener, Session session, Message message)
throws JMSException {
Connection conToClose = null;
Session sessionToClose = null;
try {
Session sessionToUse = session;
if (!isExposeListenerSession()) {
// We need to expose a separate Session.
conToClose = createConnection();
sessionToClose = createSession(conToClose);
sessionToUse = sessionToClose;
}
// Actually invoke the message listener...
listener.onMessage(message, sessionToUse);
// Clean up specially exposed Session, if any.
if (sessionToUse != session) {
if (sessionToUse.getTransacted() && isSessionLocallyTransacted(sessionToUse)) {
// Transacted session created by this container -> commit.
JmsUtils.commitIfNecessary(sessionToUse);
}
}
}
finally {
JmsUtils.closeSession(sessionToClose);
JmsUtils.closeConnection(conToClose);
}
}
2.4 AbstractPollingMessageListenerContainer
AbstractPollingMessageListenerContainer继承了AbstractMessageListenerContainer类,并实现了BeanNameAware接口。提供了对消息的接受和事物的管理。
private long receiveTimeout = DEFAULT_RECEIVE_TIMEOUT;//默认接受消息超时时间为1秒
private boolean pubSubNoLocal = false;//表示某个连接发送到某个Topic的消息,是否应该被投递回这个连接。
private PlatformTransactionManager transactionManager; //我们需要配置一个平台的事物管理器。通常情况下为org.springframework.transaction.jta.JtaTransactionManager
2.5 SimpleMessageListenerContainer
SimpleMessageListenerContainer继承自AbstractMessageListenerContainer,提供了对消息的异步接受。
private int concurrentConsumers = 1;
private Set<Session> sessions;
private Set<MessageConsumer> consumers;
允许一次启动多个Session和MessageConsumer,取决于concurrentConsumers的数量。
protected void initializeConsumers() throws JMSException {
// Register Sessions and MessageConsumers.
synchronized (this.consumersMonitor) {
if (this.consumers == null) {
this.sessions = new HashSet<Session>(this.concurrentConsumers);
this.consumers = new HashSet<MessageConsumer>(this.concurrentConsumers);
Connection con = getSharedConnection();
for (int i = 0; i < this.concurrentConsumers; i++) {
Session session = createSession(con);
MessageConsumer consumer = createListenerConsumer(session);
this.sessions.add(session);
this.consumers.add(consumer);
}
}
}
}
2.6 DefaultMessageListenerContainer
DefaultMessageListenerContainer继承了AbstractPollingMessageListenerContainer类,提供了同步消息的接受。也就是通过循环调用MessageConsumer.receive的方式接收消息。
private int cacheLevel = CACHE_AUTO;
cacheLevel表示是否对JMS资源进行缓存,如果transactionManager属性不为null,那么cacheLevel被自动设置为CACHE_NONE(不进行缓存),否则cacheLevel被自动设置为CACHE_CONSUMER。
2.7 SingleConnectionFactory
SingleConnectionFactory
- 大小: 37.2 KB
分享到:
相关推荐
SpringJMS是Spring框架的一部分,它提供了一种与Java消息服务(JMS)进行交互的简单方式。在本文中,我们将深入探讨SpringJMS的基本概念、如何与ActiveMQ集成,以及如何通过示例代码理解其工作原理。 1. **Spring...
2. `applicationContext.xml`:Spring的配置文件,定义了bean的定义和它们之间的依赖关系,包括JMS相关的配置。 3. 消息生产者类:使用`JmsTemplate`或自定义`MessageProducer`发送消息到队列或主题。 4. 消息消费者...
详细内容: SpringJMS整合ActiveMQ.doc 详细说明文档 apache-activemq-5.8.0-bin.zip ActiveMQ安装包 JMSTest.rar MyEclipse8.5下web工程
Spring-JMS是Spring框架的一部分,专门用于处理Java消息服务(JMS)的集成。它提供了一个简单的API,使得开发者能够方便地在应用中使用消息传递功能。本文将深入探讨Spring-JMS的基础知识,包括它的核心概念、配置...
Spring对JMS提供了很好的支持,可以通过JmsTemplate来方便地实现消息服务。本例通过activeMQ服务器模拟了消息的发送与接收。需要注意的是,activeMQ的运行依赖jdk的环境,而且对jdk的版本也有要求,我用的是jdk1.6+...
2. **Message Listener Container**:Spring提供了两种类型的消息监听容器——`DefaultMessageListenerContainer`和`SimpleMessageListenerContainer`。它们负责管理消息监听器的生命周期,并自动处理JMS会话和消息...
spring-jmsspring-jmsspring-jmsspring-jmsspring-jmsspring-jms
2. 事务管理:Spring JMS如何利用JMS的事务特性来保证消息的一致性。例如,当启用事务时,JmsTemplate如何确保消息在所有操作成功后才真正发送,或者在任何异常发生时回滚。 3. 消息监听:MessageListenerContainer...
**JMS整合Spring实例** Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的一种标准接口。它允许应用程序创建、发送、接收和读取消息,以此来解耦生产者和消费者。而Spring框架...
《Spring JMS 4.3.4.RELEASE:开源项目的深度解析》 Spring Framework作为Java领域最广泛应用的轻量级框架之一,其丰富的模块化设计和强大的功能深受开发者喜爱。在这一版本4.3.4.RELEASE中,Spring JMS(Java ...
Spring JMS Spring JMS 是一个基于 Java 消息服务(JMS)的框架,它提供了一个简洁的方式来使用 JMS API。Spring JMS 框架提供了一个抽象层,简化了 JMS 的使用,使得开发者可以更容易地使用 JMS。 Spring JMS 的...
2. **Spring与JMS整合** - **Spring JMS模块**:Spring框架提供了一组JMS模板和监听器容器,简化了消息的生产和消费。 - **ConnectionFactory**:JMS API的核心对象,用于创建连接到消息代理的连接。 - **...
本人开发的spring jms项目,已经上线近一年了,这里是我项目jms配置文件,使用的是spring jms 整合weblogic jms。如果真的需要,请咨询我,并且附上我上传的这个配置文件,附近中没有带有这个文件,一律不作任何回答...
在IT行业中,Spring框架是Java领域最广泛应用的轻量级框架之一,而JMS(Java Message Service)则是一种标准接口,用于在分布式系统中进行异步消息传递。ActivemQ是Apache软件基金会的一个项目,它实现了JMS规范,...
2. **Spring JMS配置**:接着,作者可能详细解释如何在Spring应用中配置JMS,包括设置ConnectionFactory、Destination(队列或主题)以及MessageListener容器。 3. **JNDI配置**:这部分将详细阐述如何在应用服务器...
赠送jar包:spring-jms-4.3.12.RELEASE.jar; 赠送原API文档:spring-jms-4.3.12.RELEASE-javadoc.jar; 赠送源代码:spring-jms-4.3.12.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-jms-4.3.12.RELEASE....
Spring JMS 是一个强大的框架,它极大地简化了Java企业级消息处理。它通过提供一套抽象和模板类,使得开发者能够更加便捷地使用Java消息服务(JMS),并与各种JMS提供者,如IBM的WebSphere MQ进行集成。本文将深入...
【Spring JMS】是Spring框架中的一个模块,用于简化Java消息服务(JMS)的使用,使得异步消息处理变得更加简单和灵活。Spring JMS通过提供一个模板类,抽象了JMS API的底层细节,让开发者能够更加专注于消息的处理...
spring jms jar包
**Spring与JMS消息传递** 在Java世界中,Java Message Service (JMS) 是一个标准接口,用于在分布式环境中发送和接收消息。Spring框架提供了一种简单而强大的方式来集成JMS,使得开发者可以轻松地在应用中实现异步...