`
eksliang
  • 浏览: 599104 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ActiveMQ与Spring集成(四)

    博客分类:
  • JMS
阅读更多

转载请出自出处:http://eksliang.iteye.com/blog/2242729

一、必须导入spring对JMS封装的包 

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jms</artifactId>
	<version>3.2.9.RELEASE</version>
</dependency>

<dependency>
	 <groupId>org.apache.activemq</groupId>
	 <artifactId>activemq-all</artifactId>
	 <version>5.5.0</version>
</dependency>
<!--  ActiveMQ依赖的日志包 -->
<dependency>
	<groupId>log4j</groupId>
	<artifactId>log4j</artifactId>
	<version>1.2.14</version>
</dependency>

<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-log4j12</artifactId>
	<version>1.5.6</version>
</dependency>

 

二、创建连接工厂

配置JMS的连接工厂,让Spring知道如何连接到ActiveMQ。ActiveMQConnectionFactory是ActiveMQ自带的连接工厂,在spring中可以使用如下方式进行配置:

<bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">
	<property name="brokerURL" value="tcp://localhost:61616"/>
</bean>

 

三、声明ActiveMQ消息目的地

消息目的地可以是一个队列,也可以是一个主题,这取决于应用的需求。如果便是在spring中分别创建的队列(queue)目的地与主题(topic)目的地

<!-- 队列的目的 -->
<bean id="queue" class="org.apache.activemq.command.ActiveMQQueue">
	<constructor-arg value="queue.destination"/>
</bean>

<!-- 主题的目的地 -->
<bean id="topic" class="org.apache.activemq.command.ActiveMQTopic">
	<constructor-arg value="topic.Destination"/>
</bean>

 

 四、使用Spring的模板代码来简化消息的发送与接收

针对如果消除冗余和重复的JMS代码,Spring给出的解决方案是JmsTemplate.为了使用JmsTemplate,我们需要在Spring的配置文件中将他声明为一个Bean,如下所示。

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
	<property name="connectionFactory" ref="connectionFactory"/>
	<!-- 下面这两个不是必须的,因为jmsTemplate的方法可以指定目的地 -->
	<!-- <property name="defaultDestinationName" value="queue.destination"/> -->
	<property name="defaultDestination" ref="queue"></property>
</bean>
	
<!-- 装配发送消息实体 -->
<bean id="queueSendService" class="com.gosun.jms.QueueSendService">
	<property name="jmsTemplate" ref="jmsTemplate"/>
</bean>
<!-- 装配接收消息实体 -->
<bean id="queuesAcceptService" class="com.gosun.jms.QueuesAcceptService">
	<property name="jmsTemplate" ref="jmsTemplate"/>
</bean>

 

  • com.gosun.jms.domain.User代码如下:
package com.gosun.jms.domain;

import java.io.Serializable;

public class User implements Serializable{
	private static final long serialVersionUID = 13531L;
	private String userName;
	private String userPwd;
	private Float  sal;
	
	get() set().....!省略
	
	@Override
	public String toString() {
		return "User [userName=" + userName + ", userPwd=" + userPwd + ", sal="
				+ sal + "]";
	}
}
  •  com.gosun.jms.QueueSendService代码
package com.gosun.jms;

import javax.jms.JMSException;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import com.gosun.jms.domain.User;

/**
 * 发送消息,消息的生产者
 * @author Ickes
 */
public class QueueSendService {
	
	private JmsTemplate jmsTemplate;
	
	/**
	 * 使用JmsTemplate发送序列化消息
	 * @param user
	 */
	public void send(final User user){
//		jmsTemplate.send(destination, messageCreator)//可以自己指定目的地
		jmsTemplate.send(new MessageCreator() {
			@Override
			public ObjectMessage createMessage(Session session) throws JMSException {
				ObjectMessage msg = session.createObjectMessage();
				msg.setObject(user);
				return msg;
			}
		});
	}

	public JmsTemplate getJmsTemplate() {
		return jmsTemplate;
	}

	public void setJmsTemplate(JmsTemplate jmsTemplate) {
		this.jmsTemplate = jmsTemplate;
	}
}

 

  • com.gosun.jms.QueuesAcceptService代码如下
package com.gosun.jms;

import javax.jms.JMSException;
import javax.jms.ObjectMessage;
import org.springframework.jms.core.JmsTemplate;

/**
 * 接收消息,消息的消费者
 * @author Ickes
 */
public class QueuesAcceptService {
	private JmsTemplate jmsTemplate;
	
	/**
	 * 接收消息
	 */
	public void receive(){
		ObjectMessage msg = (ObjectMessage) jmsTemplate.receive();
		try {
			System.out.println(msg.getObject());
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}

	public JmsTemplate getJmsTemplate() {
		return jmsTemplate;
	}

	public void setJmsTemplate(JmsTemplate jmsTemplate) {
		this.jmsTemplate = jmsTemplate;
	}
}

 

测试代码如下:

public static void main(String[] args) {
		ApplicationContext context =new  ClassPathXmlApplicationContext("applicationContext-activeMQ.xml");
		//先发送消息
		QueueSendService qss = (QueueSendService) context.getBean("queueSendService");
		User user = new User();
		user.setUserName("ickes");
		user.setUserPwd("123456");
		user.setSal(12000F);
		qss.send(user);
		//接收消息
		QueuesAcceptService qas = (QueuesAcceptService) context.getBean("queuesAcceptService");
		qas.receive();

 

当调用JmsTemplate的receive()方法时,JmsTemplate会尝试从ActiveMQ中获取一个消息。如果没有可用的消息,receive()方法会一直等待,直到获得消息为止。也就是说该方法时同步的。这意味着接收者必须耐心等待消息的到来,因此receive()方法会一直被阻塞,直到有可用消息(或者消息超时),同步接收异步发送的消息,是不是感觉很怪异?怎么解决这个问题呢?

答:使用消息驱动POJO,怎么使用,在下篇博客中进行阐述。

 

 

 

 

2
4
分享到:
评论
1 楼 戢_时光 2015-09-12  

相关推荐

    ActiveMQ与spring集成实例之使用Maven构建

    标题中的“ActiveMQ与Spring集成实例之使用Maven构建”是指在Java开发环境中,通过Maven构建工具将Apache ActiveMQ消息中间件与Spring框架整合在一起的实际操作案例。这个主题涵盖了几大关键知识点: 1. **Apache ...

    ActiveMQ与spring集成实例

    通过以上步骤,你已经成功地将ActiveMQ与Spring集成,并实现了基本的消息收发功能。在实际项目中,你可能需要根据需求调整配置,例如设置消息的持久化、事务支持、消息优先级等高级特性。此外,ActiveMQ还提供了管理...

    ActiveMQ与spring集成实例之使用消息监听器

    **ActiveMQ与Spring集成实例详解** ActiveMQ是Apache软件基金会下的一个开源项目,它是一个功能丰富的Java消息服务(JMS)提供商,支持多种协议,并且能够处理大量的并发消息传输。而Spring框架则是一个广泛使用的...

    activemq与spring整合源代码

    Spring还提供了丰富的模块,如数据访问、Web、测试等,其中Spring JMS模块专门用于集成消息中间件,使得与ActiveMQ的整合变得简单。 三、ActiveMQ与Spring的整合 1. 添加依赖:首先,在项目中引入ActiveMQ和Spring...

    消息队列:ActiveMQ:ActiveMQ的Spring集成.docx

    消息队列:ActiveMQ:ActiveMQ的Spring集成.docx

    ActiveMQ与spring集成实例之使用消息转换器

    **ActiveMQ与Spring集成实例——使用消息转换器** 在企业级应用开发中,消息队列(Message Queue,MQ)作为一种解耦和异步处理的重要工具,被广泛应用。Apache ActiveMQ 是一个开源的消息中间件,它支持多种消息...

    activemq5.5.1 Spring模板

    本文将深入探讨ActiveMQ 5.5.1版本与Spring框架的集成,以及如何利用Spring的模板模式简化ActiveMQ的使用。 一、ActiveMQ基础介绍 ActiveMQ是Apache软件基金会下的一个项目,遵循JMS(Java消息服务)规范,支持多种...

    ActiveMQ与Spring线程池整合实例

    ActiveMQ与Spring线程池整合的一个实例。 lib库没有上传。 对于实例的讲解,在竹子的论坛有我对这个实例的帖子(http://www.java2000.net/viewthread.jsp?tid=1167) lib中包含: apache-activemq-4.1.1.jar ...

    activemq与spring的整合案例

    本案例主要展示了如何在Spring应用中集成ActiveMQ,实现消息的发送和接收。首先,我们需要在项目中引入ActiveMQ的相关依赖。在Maven工程中,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.apache....

    activeMQ和Spring集成Demo

    ActiveMQ和Spring的集成是企业级Java应用中常见的消息中间件解决方案,用于实现解耦、异步处理和系统间的通信。在本示例中,我们将深入探讨如何将这两个组件结合在一起,以创建一个高效且可扩展的应用架构。 首先,...

    activeMQ与spring整合开发的例子程序

    1. **Spring集成ActiveMQ的基本配置**:在Spring应用中使用ActiveMQ,首先需要在Spring配置文件中添加JMS相关的bean,如ConnectionFactory、Destination(Queue或Topic)、MessageListenerContainer等。这些配置将...

    ActiveMQ与Spring整合示例Demo

    **二、Spring与ActiveMQ集成** 1. **引入依赖** 在Spring项目中,我们需要添加ActiveMQ的相关依赖,如`spring-jms`和`activemq-client`。在`pom.xml`或`build.gradle`文件中添加对应的Maven或Gradle依赖。 2. **...

    activemq与spring整合发送jms消息入门实例

    ActiveMQ支持多种协议,如OpenWire、AMQP、STOMP等,并且可以与其他Java应用服务器集成。 Spring框架则是一个广泛应用的轻量级容器,它简化了Java应用程序的开发,包括对JMS的支持。Spring通过其`org.spring...

    Spring集成ActiveMQ配置

    Spring集成ActiveMQ配置详解 Spring框架与ActiveMQ的集成,为开发者提供了一种高效、可靠的JMS消息处理机制。在企业级应用中,这种集成能够极大地提升系统的响应速度和容错能力,特别是在需要异步通信和分布式事务...

    ActiveMQ与Spring的结合

    ActiveMQ与Spring的整合是企业级应用中常见的一种消息中间件集成方式,它允许应用程序通过Spring的声明式配置来轻松地使用ActiveMQ。ActiveMQ是Apache软件基金会开发的一个开源消息代理,实现了多种消息协议,如...

    JMS之ActiveMQ与Spring整合源码

    将ActiveMQ与Spring整合,可以方便地在Spring应用中使用JMS,实现消息驱动的架构。 本文将深入探讨ActiveMQ与Spring整合的关键知识点: 1. **Spring对JMS的支持**: Spring提供了`org.springframework.jms`包,该...

    activemq-spring-5.5.0.jar.zip

    《ActiveMQ与Spring整合——深度解析5.5.0版本》 在Java消息服务(Java Message Service,简称JMS)领域,Apache ActiveMQ是广泛使用的开源消息代理和集成框架。它支持多种协议,如OpenWire、AMQP、STOMP、MQTT等,...

    ActiveMQ+spring配置方案详解

    以上就是ActiveMQ与Spring的集成配置方案,涵盖了连接工厂、JMS模板、监听容器以及消息监听器等关键元素。通过这样的配置,我们可以方便地在Spring应用中发送和接收消息,从而实现服务间的异步通信。在实际应用中,...

    ActiveMQ整合spring的Demo

    2. **Spring集成ActiveMQ**:Spring通过`spring-jms`模块提供对JMS的支持。在Spring配置文件中(如`applicationContext.xml`),你需要定义一个`JmsTemplate`,它提供了一种简单的方式来发送和接收消息。同时,配置`...

    activeMQ_spring简单案例(含XML配置)

    在本文中,我们将深入探讨如何将ActiveMQ与Spring框架整合,构建一个简单的消息传递系统。ActiveMQ是Apache软件基金会开发的开源消息中间件,而Spring则是一个广泛使用的Java企业级应用开发框架。将两者结合,我们...

Global site tag (gtag.js) - Google Analytics