`
Technoboy
  • 浏览: 156745 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Spring JMS (2)

阅读更多
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
1
0
分享到:
评论

相关推荐

    SpringJMS示例代码

    SpringJMS是Spring框架的一部分,它提供了一种与Java消息服务(JMS)进行交互的简单方式。在本文中,我们将深入探讨SpringJMS的基本概念、如何与ActiveMQ集成,以及如何通过示例代码理解其工作原理。 1. **Spring...

    spring_jms

    2. `applicationContext.xml`:Spring的配置文件,定义了bean的定义和它们之间的依赖关系,包括JMS相关的配置。 3. 消息生产者类:使用`JmsTemplate`或自定义`MessageProducer`发送消息到队列或主题。 4. 消息消费者...

    SpringJMS整合ActiveMQ

    详细内容: SpringJMS整合ActiveMQ.doc 详细说明文档 apache-activemq-5.8.0-bin.zip ActiveMQ安装包 JMSTest.rar MyEclipse8.5下web工程

    spring-jms入门

    Spring-JMS是Spring框架的一部分,专门用于处理Java消息服务(JMS)的集成。它提供了一个简单的API,使得开发者能够方便地在应用中使用消息传递功能。本文将深入探讨Spring-JMS的基础知识,包括它的核心概念、配置...

    springjms的demo

    Spring对JMS提供了很好的支持,可以通过JmsTemplate来方便地实现消息服务。本例通过activeMQ服务器模拟了消息的发送与接收。需要注意的是,activeMQ的运行依赖jdk的环境,而且对jdk的版本也有要求,我用的是jdk1.6+...

    Java网络编程--基于Spring的JMS编程

    2. **Message Listener Container**:Spring提供了两种类型的消息监听容器——`DefaultMessageListenerContainer`和`SimpleMessageListenerContainer`。它们负责管理消息监听器的生命周期,并自动处理JMS会话和消息...

    spring-jms 源代码包

    spring-jmsspring-jmsspring-jmsspring-jmsspring-jmsspring-jms

    spring-jms源码

    2. 事务管理:Spring JMS如何利用JMS的事务特性来保证消息的一致性。例如,当启用事务时,JmsTemplate如何确保消息在所有操作成功后才真正发送,或者在任何异常发生时回滚。 3. 消息监听:MessageListenerContainer...

    JMS整合Spring实例

    **JMS整合Spring实例** Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的一种标准接口。它允许应用程序创建、发送、接收和读取消息,以此来解耦生产者和消费者。而Spring框架...

    spring-jms-4.3.4.RELEASE.zip

    《Spring JMS 4.3.4.RELEASE:开源项目的深度解析》 Spring Framework作为Java领域最广泛应用的轻量级框架之一,其丰富的模块化设计和强大的功能深受开发者喜爱。在这一版本4.3.4.RELEASE中,Spring JMS(Java ...

    Spring JMS

    Spring JMS Spring JMS 是一个基于 Java 消息服务(JMS)的框架,它提供了一个简洁的方式来使用 JMS API。Spring JMS 框架提供了一个抽象层,简化了 JMS 的使用,使得开发者可以更容易地使用 JMS。 Spring JMS 的...

    jms整合spring工程

    2. **Spring与JMS整合** - **Spring JMS模块**:Spring框架提供了一组JMS模板和监听器容器,简化了消息的生产和消费。 - **ConnectionFactory**:JMS API的核心对象,用于创建连接到消息代理的连接。 - **...

    spring jms 整合 weblogic jms

    本人开发的spring jms项目,已经上线近一年了,这里是我项目jms配置文件,使用的是spring jms 整合weblogic jms。如果真的需要,请咨询我,并且附上我上传的这个配置文件,附近中没有带有这个文件,一律不作任何回答...

    spring整合jms+activemq

    在IT行业中,Spring框架是Java领域最广泛应用的轻量级框架之一,而JMS(Java Message Service)则是一种标准接口,用于在分布式系统中进行异步消息传递。ActivemQ是Apache软件基金会的一个项目,它实现了JMS规范,...

    Spring JMS 消息处理-基于JNDI

    2. **Spring JMS配置**:接着,作者可能详细解释如何在Spring应用中配置JMS,包括设置ConnectionFactory、Destination(队列或主题)以及MessageListener容器。 3. **JNDI配置**:这部分将详细阐述如何在应用服务器...

    spring-jms-4.3.12.RELEASE-API文档-中英对照版.zip

    赠送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把企业消息处理变容易.doc

    Spring JMS 是一个强大的框架,它极大地简化了Java企业级消息处理。它通过提供一套抽象和模板类,使得开发者能够更加便捷地使用Java消息服务(JMS),并与各种JMS提供者,如IBM的WebSphere MQ进行集成。本文将深入...

    Spring JMS使异步消息变得简单.doc

    【Spring JMS】是Spring框架中的一个模块,用于简化Java消息服务(JMS)的使用,使得异步消息处理变得更加简单和灵活。Spring JMS通过提供一个模板类,抽象了JMS API的底层细节,让开发者能够更加专注于消息的处理...

    spring jms 3.2

    spring jms jar包

    Spring发送接收JMS消息

    **Spring与JMS消息传递** 在Java世界中,Java Message Service (JMS) 是一个标准接口,用于在分布式环境中发送和接收消息。Spring框架提供了一种简单而强大的方式来集成JMS,使得开发者可以轻松地在应用中实现异步...

Global site tag (gtag.js) - Google Analytics