`

spring jms异步消息处理

jms 
阅读更多
spring JMS对于异步消息处理基本上只需配置下就能进行高效的处理。其核心就是消息侦听器容器,常用的类就是DefaultMessageListenerContainer。该容器可配置侦听器的并发数量,以及配合MessageListenerAdapter使用消息驱动POJO进行消息处理。且消息驱动POJO是放入TaskExecutor中进行处理,进一步提高性能,减少侦听器的阻塞。具体配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jms="http://www.springframework.org/schema/jms"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
						   http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-2.5.xsd">

	<bean id="connectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
		<property name="connectionFactory">
			<bean class="org.apache.activemq.ActiveMQConnectionFactory">
				<property name="brokerURL">
					<value>failover:(tcp://192.168.6.2:61616)</value>
				</property>
			</bean>
		</property>
	</bean>
	
	<bean id="threadPoolTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
		<property name="corePoolSize" value="5"/>
		<property name="maxPoolSize" value="20"/>
		<property name="queueCapacity" value="1000"/>
		<property name="threadNamePrefix" value="jmsTaskExecutor-"/>
		<property name="allowCoreThreadTimeOut" value="true"></property>
	</bean>
	
	<bean id ="testMessageListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
		<constructor-arg>
			<bean class="com.test.jms.TestMessageListener"/>
		</constructor-arg>
	</bean>

	<jms:listener-container concurrency="5-20" task-executor="threadPoolTaskExecutor" >
		<jms:listener destination="testqueue" ref="testMessageListener"/>
	</jms:listener-container>
	
	
	<bean id="jmsDestination" class="org.apache.activemq.command.ActiveMQQueue">
		<constructor-arg index="0" value="testqueue"></constructor-arg>
	</bean>
	
	<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
		<property name="connectionFactory" ref="connectionFactory"></property>
		<property name="defaultDestination" ref="jmsDestination"></property>
	</bean>
	
</beans>

而开发人员只要实现com.test.jms.TestMessageListener即可,且TestMessageListener可以是一个POJO(不过方法名参照MessageListener接口)。代码如下:
public class TestMessageListener {
	public void handleMessage(String message){
		System.out.println("text message:"+message);
	}
	
	public void handleMessage(Object message){
		System.out.println("object message:"+message+","+Thread.currentThread().getName());
	}
}
分享到:
评论

相关推荐

    tomcat spring jms 异步消息传递入门实例

    4. **实现消息监听器**:创建一个实现了`javax.jms.MessageListener`接口的类,用于接收和处理消息。当消息到达时,JMS容器会自动调用`onMessage`方法。 ```java @Component public class MyMessageListener ...

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

    通过对比传统JMS实现和Spring JMS,我们可以看到Spring JMS显著减少了开发者处理消息时的代码量和复杂性,使得异步消息处理的实现更为简洁。这不仅降低了出错的可能性,也使得代码更易于测试和维护。Spring JMS的...

    spring jms tomcat 异步消息传递入门实例

    4. **创建消息消费者**:为了接收消息,你需要创建一个`MessageListener`实现,如`MessageListenerAdapter`,它将监听指定的目的地,并调用你提供的方法来处理消息。在Spring配置中,将监听器绑定到目标目的地。 5....

    Spring JMS异步发收消息 ActiveMQ

    JMS(使用消息中介:ActiveMQ) ...JmsTemplate是Spring消除冗长和重复JMS代码的解决方案。JmsTemplate可以创建连接,获取会话,以及发送和接收消息。http://blog.csdn.net/facepp/archive/2008/11/26/3374151.aspx

    使用Spring JMS轻松实现异步消息传递.pdf

    **使用 Spring JMS 实现异步处理** 在 Spring 中,发送 JMS 消息通常涉及以下步骤: 1. 配置 JMS 容器(如 ActiveMQ、IBM WebSphere MQ 或 JBoss MQ)。 2. 在 Spring 配置文件中定义 JmsTemplate 和消息目的地...

    Spring JMS 消息处理-基于JNDI

    博客可能涵盖Spring JMS如何处理消息传递失败,以及如何结合JMS与Spring的事务管理。 7. **实战示例**:最后,博主会提供一个实际的示例,展示如何在一个简单的Spring应用中集成JMS,包括创建JNDI资源、配置Spring...

    Spring发送接收JMS消息

    **Spring与JMS消息传递** ...同时,Spring提供的事务管理和异步处理功能进一步增强了JMS的实用性。在实际项目中,结合具体的业务需求,可以灵活选择合适的模式和策略来利用Spring和JMS实现高效的消息通信。

    使用Spring JMS轻松实现异步消息传递.docx

    通过 Spring JMS,我们可以利用消息中间件(如 ActiveMQ、RabbitMQ 或 HornetQ)来解耦生产者(发送消息的组件)和消费者(接收并处理消息的组件),从而实现异步处理。这种解耦有助于提高系统的可扩展性和容错性。 ...

    Spring JMS消息处理-不基于JNDI

    总的来说,Spring JMS为不依赖JNDI的环境提供了强大且灵活的消息处理能力,使得开发者能够方便地实现解耦和异步处理,从而提升系统的可扩展性和稳定性。通过理解并掌握这些知识点,你将能够在实际项目中更自如地运用...

    javaEE 异步消息处理

    总结起来,JavaEE异步消息处理通过JMS和消息队列实现了客户端和服务端之间的解耦和高效通信,利用线程池和异步处理提升了系统的并发性和响应能力。开发者可以利用各种框架和工具,如EJB的MDB或Spring的JMS支持,轻松...

    spring_jms

    4. 消息消费者类:实现`MessageListener`接口,用于接收和处理消息。 5. 测试用例:验证消息的生产和消费是否正常工作。 在具体实践中,我们需要在`applicationContext.xml`中配置JMS连接工厂、目的地(队列或主题...

    spring-jms:Spring JMS可同时使用异步消息和异步消息

    该项目提供了一些使用Spring JMS进行异步和同步消息使用的示例。 异步消费 所有异步消息使用的示例都使用Spring 进行消息使用。 Spring JMS支持三种类型的消息侦听器,包括: [MessageListenerAdapter]( 异步...

    spring-jms入门

    - **消费者(Consumer)**:接收和处理消息的应用。 - **消息代理(Message Broker)**:如ActiveMQ,负责存储、转发消息。 **3. Spring-JMS概述** Spring-JMS提供了一种高层次的抽象,简化了JMS的使用。它支持消息模板...

    spring-jms源码

    MessageListenerContainer是Spring JMS用于异步处理消息的组件,它可以监听一个或多个队列或主题,并在接收到消息时调用预先注册的MessageListener。这使得应用程序可以专注于业务逻辑,而无需关心消息的接收和处理...

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

    在Java中,Spring框架提供了强大而灵活的支持,使得开发人员能够轻松地实现基于Java消息服务(JMS)的网络编程。JMS是一个标准接口,它允许应用程序创建、发送、接收和读取消息,这些消息可以在不同的应用之间传递,...

    spring-jms-4.3.4.RELEASE.zip

    1. **解耦和异步处理**:Spring JMS可用于系统间的解耦,一个系统发送消息,另一个系统接收并处理,降低了系统间的依赖性。 2. **批量处理和调度**:通过消息队列,可以实现批量数据处理和定时任务调度,避免了同步...

    jms整合spring工程

    - **异步处理**:JMS可用于非阻塞地处理任务,提高应用响应速度。 - **解耦**:消息队列使生产者和消费者无需同时在线,降低了系统的耦合度。 - **负载均衡**:多个消费者可以从同一个队列中接收消息,实现任务...

Global site tag (gtag.js) - Google Analytics