JMS进阶-Spring整合Active MQ

只能说,Spring太流弊了,啥都能整合~~~~

First of all, start the service of Active MQ

项目目录结构如下

用到的jar包如下

activemq-client-5.13.1.jar
commons-logging-1.1.3.jar
geronimo-j2ee-management_1.1_spec-1.0.1.jar
geronimo-jms_1.1_spec-1.1.1.jar
hamcrest-core-1.3.jar
junit-4.12.jar
log4j-1.2.17.jar
org.springframework.transaction.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.13.jar
spring-aop-4.2.4.RELEASE.jar
spring-aspects-4.2.4.RELEASE.jar
spring-beans-4.2.4.RELEASE.jar
spring-context-4.2.4.RELEASE.jar
spring-context-support-4.2.4.RELEASE.jar
spring-core-4.2.4.RELEASE.jar
spring-expression-4.2.4.RELEASE.jar
spring-jms-4.2.4.RELEASE.jar
spring-messaging-4.2.4.RELEASE.jar
spring-test-4.2.4.RELEASE.jar

applicationContext.xml

<?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:context="http://www.springframework.org/schema/context"
	xmlns:jms="http://www.springframework.org/schema/jms"
	xsi:schemaLocation="http://www.springframework.org/schema/beans  
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
     http://www.springframework.org/schema/context  
     http://www.springframework.org/schema/context/spring-context-3.0.xsd  
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
    http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.0.xsd">

	<context:component-scan base-package="com.spring" />

	<!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->
	<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
		<!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
		<property name="connectionFactory" ref="connectionFactory" />
	</bean>

	<!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 -->
	<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
		<property name="brokerURL" value="tcp://localhost:61616" />
	</bean>

	<!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
	<bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
		<!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
		<property name="targetConnectionFactory" ref="targetConnectionFactory" />
	</bean>

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

	<!-- 消息监听器 -->
	<bean id="consumerMessageListener" class="com.spring.jms.ConsumerMessageListener" />
	<!-- 消息监听容器 -->
	<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
		<property name="connectionFactory" ref="connectionFactory" />
		<property name="destination" ref="queueDestination" />
		<property name="messageListener" ref="consumerMessageListener" />
	</bean>
</beans>

ProducerService接口

public interface ProducerService {

	public void sendMessage(Destination destination, final String message);
}

ProducerServiceImpl.java

import org.apache.log4j.Logger;

@Component
public class ProducerServiceImpl implements ProducerService{

	private static final Logger logger = Logger.getLogger(ProducerConsumerTest.class);
	@Resource
	private JmsTemplate jmsTemplate;  

	@Override
	public void sendMessage(Destination destination, final String message) {
		System.out.println("sendMessage:" + message);
        jmsTemplate.send(destination, new MessageCreator() {  
            public Message createMessage(Session session) throws JMSException {  
                return session.createTextMessage(message);  
            }  
        });
	}
}

ConsumerMessageListener

import org.apache.log4j.Logger;

public class ConsumerMessageListener implements MessageListener{

	private static final Logger logger = Logger.getLogger(ProducerConsumerTest.class);
	@Override
	public void onMessage(Message message) {
		//这里我们知道生产者发送的就是一个纯文本消息,所以这里可以直接进行强制转换  
        TextMessage textMsg = (TextMessage) message;  
        try {  
        	System.out.println("接收到消息:" + textMsg.getText());
        } catch (JMSException e) {  
            e.printStackTrace();  
        } 
	}

}

测试类

import org.apache.log4j.Logger;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/applicationContext.xml")
public class ProducerConsumerTest {

	private static final Logger logger = Logger.getLogger(ProducerConsumerTest.class);
	@Autowired  
    private ProducerService producerService;  
    @Autowired  
    @Qualifier("queueDestination")  
    private Destination destination;  
      
    @Test  
    public void testSend() {  
        for (int i=0; i<2; i++) {  
            producerService.sendMessage(destination, "你好,生产者!这是消息:" + (i+1));  
        }  
    }
}

控制台输出如下

log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.SpringJUnit4ClassRunner).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
sendMessage:你好,生产者!这是消息:1
接收到消息:你好,生产者!这是消息:1
sendMessage:你好,生产者!这是消息:2
接收到消息:你好,生产者!这是消息:2
时间: 2024-12-16 10:13:30

JMS进阶-Spring整合Active MQ的相关文章

JMS 之 Active MQ 的spring整合

一.与spring整合实现ptp的同步接收消息 pom.xml: <!-- https://mvnrepository.com/artifact/org.springframework/spring-jms --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>4.3.7.RE

深入浅出JMS(四)--Spring和ActiveMQ整合的完整实例

基于spring+JMS+ActiveMQ+Tomcat,做一个Spring4.1.0和ActiveMQ5.11.1整合实例,实现了Point-To-Point的异步队列消息和PUB/SUB(发布/订阅)模型,简单实例,不包含任何业务. 环境准备 工具 JDK1.6或1.7 Spring4.1.0 ActiveMQ5.11.1 Tomcat7.x 目录结构 所需jar包 项目的配置 配置ConnectionFactory connectionFactory是Spring用于创建到JMS服务器链接

Spring整合JMS——基于ActiveMQ实现

1.1     JMS简介 JMS的全称是Java Message Service,即Java消息服务.它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息.把它应用到实际的业务需求中的话我们可以在特定的时候利用生产者生成一消息,并进行发送,对应的消费者在接收到对应的消息后去完成对应的业务逻辑.对于消息的传递有两种类型,一种是点对点的,即一个生产者和一个消费者一一对应:另一种是发布/订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收. 1.2  

Spring整合JMS(三)——MessageConverter介绍

Spring整合JMS(三)——MessageConverter介绍 博客分类: Spring Jms SpringjmsintegratemessageConverter 1.4     消息转换器MessageConverter MessageConverter的作用主要有两方面,一方面它可以把我们的非标准化Message对象转换成我们的目标Message对象,这主要是用在发送消息的时候:另一方面它又可以把我们的Message对象转换成对应的目标对象,这主要是用在接收消息的时候. 下面我们就

Spring整合JMS(二)——三种消息监听器

一.消息监听器MessageListener 在Spring整合JMS的应用中我们在定义消息监听器的时候一共可以定义三种类型的消息监听器,分别是MessageListener.SessionAwareMessageListener和MessageListenerAdapter.下面就分别来介绍一下这几种类型的区别. 1).MessageListener MessageListener是最原始的消息监听器,它是JMS规范中定义的一个接口.其中定义了一个用于处理接收到的消息的onMessage方法,

JMS 之 Active MQ 启动嵌入式Broke

一.如何启动active MQ 服务 (一).使用命令启动 a./usr/local/activemq-5.9.0/bin 目录下 ./activemq start 默认使用conf/activemq.xml 配置文件 b.[[email protected] bin]# ./activemq start xbean:file:../conf/activemq-slave1.xml 使用指定的配置文件启动 (二).代码启动broker 在程序中可以通过编码的方式启动broker,如果要启动多个b

Spring整合JMS(一)——基于ActiveMQ实现

1.1     JMS简介 JMS的全称是Java Message Service,即Java消息服务.它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息.把它应用到实际的业务需求中的话我们可以在特定的时候利用生产者生成一消息,并进行发送,对应的消费者在接收到对应的消息后去完成对应的业务逻辑.对于消息的传递有两种类型,一种是点对点的,即一个生产者和一个消费者一一对应:另一种是发布/订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收. 1.2  

JMS实现-ActiveMQ,介绍,安装,使用,注意点,spring整合

[TOC] 缘由: 最近在用netty开发游戏服务器,目前有这样的一个场景,聊天服务器和逻辑服务器要进行消息交互,比如,某个玩家往某个公会提交了加入申请,这个申请动作是在逻辑服务器上完成的,但是要产生一条申请消息,由聊天服务器推送到对应的公会频道,目前这个申请消息就是通过jms发送到聊天服务器上,聊天服务器监听到后,推送到对应的公会频道. 下面主要介绍以下几点 - JMS简介 - 消息传递模型 - ActiveMQ介绍 - 安装使用 - spring整合JMS - 代码相关 JMS简介 J Ja

spring整合JMS - 基于ActiveMQ实现

一. 开篇语 继上一篇apache ActiveMQ之初体验后, 由于近期一直在复习spring的东西, 所以本文就使用spring整合下JMS. 二. 环境准备 1. ActiveMQ5.2.0 (activemq-all-5.2.0.jar) 2. spring2.5 (spring.jar) 3. JavaEE5 4. JDK1.6 注意: 測试前请先启动ActiveMQserver 三. 代码測试(P2P) 1. MsgSender: 消息生产者 /** * message sender