本文主要是介绍Spring 整合JMS(activeMQ)(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
2 发布/订阅模式
2.1 消息生产者
(1)在工程springjms_producer的applicationContext-jms-producer.xml增加配置
<!--这个是订阅模式 文本信息--> <bean id="topicTextDestination" class="org.apache.activemq.command.ActiveMQTopic"> <constructor-arg value="topic_text"/> </bean>
(2)创建生产者类
TopicProducer.java
package com.wjl.demo;import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Component;@Component
public class TopicProducer {@Autowiredprivate JmsTemplate jmsTemplate;@Autowiredprivate Destination topicTextDestination;public void sendTextMessage(final String text) {jmsTemplate.send(topicTextDestination, new MessageCreator() {public Message createMessage(Session session) throws JMSException {return session.createTextMessage(text);}});}
}
(3)编写测试类
package com.wjl.test;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.wjl.demo.TopicProducer;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext-jms-producer.xml")
public class TestTopic {@Autowiredprivate TopicProducer topicProducer;@Testpublic void testSend() {topicProducer.sendTextMessage("测试 发布/订阅!");}
}
2.2消息消费者
(1)在activemq-spring-consumer工程中创建配置文件applicationContext-jms-consumer-topic.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:amq="http://activemq.apache.org/schema/core"xmlns:jms="http://www.springframework.org/schema/jms"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- <context:component-scan base-package="com.wjl.demo"></context:component-scan> --><!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供--> <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://192.168.13.91: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="topicTextDestination" class="org.apache.activemq.command.ActiveMQTopic"> <constructor-arg value="topic_text"/> </bean> <!-- 我的监听类 --><bean id="myMessageListener" class="com.wjl.demo.MyMessageListener"></bean><!-- 消息监听容器 --><bean class="org.springframework.jms.listener.DefaultMessageListenerContainer"><property name="connectionFactory" ref="connectionFactory" /><property name="destination" ref="topicTextDestination" /><property name="messageListener" ref="myMessageListener" /></bean></beans>
(2)编写测试类
package com.wjl.test;import java.io.IOException;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext-jms-consumer-topic.xml")
public class TestTopic {@Testpublic void testTopic() {try {System.in.read();} catch (IOException e) {e.printStackTrace();}}
}
测试:同时运行三个消费者工程,在运行生产者工程,查看三个消费者工程的控制台输出。
这篇关于Spring 整合JMS(activeMQ)(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!