黑马程序员技术交流社区
标题: 【郑州校区】Java之品优购课程讲义_day13(4) [打印本页]
作者: 谷粒姐姐 时间: 2018-10-10 11:01
标题: 【郑州校区】Java之品优购课程讲义_day13(4)
1. Spring 整合 JMS
1.1 点对点模式1.1.1 消息生产者(1)创建工程 springjms_producer,在 POM 文件中引入 SpringJms 、activeMQ 以及单元测试相关依赖
(2)在 src/main/resources 下创建 spring 配置文件 applicationContext-jms-producer.xml
[AppleScript] 纯文本查看 复制代码
<context:component-scan base-package="cn.itcast.demo"></context:component-scan>
<!-- 真正可以产生 Connection 的 ConnectionFactory,由对应的 JMS 服务厂商提供-->
<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://192.168.25.135:61616"/>
</bean>
<!-- Spring 用于管理真正的 ConnectionFactory 的 ConnectionFactory -->
<bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
<!-- 目标 ConnectionFactory 对应真实的可以产生 JMS Connection 的 ConnectionFactory -->
<property name="targetConnectionFactory" ref="targetConnectionFactory"/>
</bean>
<!-- Spring 提供的 JMS 工具类,它可以进行消息发送、接收等 -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<!-- 这个 connectionFactory 对应的是我们定义的 Spring 提供的那个 ConnectionFactory
对 象 -->
<property name="connectionFactory" ref="connectionFactory"/>
</bean>
<!--这个是队列目的地,点对点的 文本信息-->
<bean id="queueTextDestination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="queue_text"/>
</bean>
(3)在 cn.itcast.demo 包下创建消息生产者类
[AppleScript] 纯文本查看 复制代码
@Component
public class QueueProducer {
@Autowired
private JmsTemplate jmsTemplate;
@Autowired
private Destination queueTextDestination;
/**
*发送文本消息
*@param text
*/
public void sendTextMessage(final String text){ jmsTemplate.send(queueTextDestination, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(text);
}
});
}
}
(4)单元测试
在 src/test/java 创建测试类
[AppleScript] 纯文本查看 复制代码
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations="classpath:applicationContext-jms-producer.xml") public class TestQueue {
@Autowired
private QueueProducer queueProducer;
@Test
public void testSend(){ queueProducer.sendTextMessage("SpringJms-点对点");
}
}
1.1.1 消息消费者
(1)创建工程 springjms_consumer,在 POM 文件中引入依赖 (同上一个工程)
(2)创建配置文件 applicationContext-jms-consumer-queue.xml
[AppleScript] 纯文本查看 复制代码
<!-- 真正可以产生 Connection 的 ConnectionFactory,由对应的 JMS 服务厂商提供-->
<bean id="targetConnectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://192.168.25.135: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="queueTextDestination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="queue_text"/>
</bean>
<!-- 我的监听类 -->
<bean id="myMessageListener" class="cn.itcast.demo.MyMessageListener"></bean>
<!-- 消息监听容器 -->
<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destination" ref="queueTextDestination" />
<property name="messageListener" ref="myMessageListener" />
</bean>
(3)编写监听类
[AppleScript] 纯文本查看 复制代码
public class MyMessageListener implements MessageListener {
public void onMessage(Message message) { TextMessage textMessage=(TextMessage)message; try {
System.out.println("接收到消息:"+textMessage.getText());
} catch (JMSException e) { e.printStackTrace();
}
}
}
(4)创建测试类
[AppleScript] 纯文本查看 复制代码
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext-jms-consumer-queue.xm l")
public class TestQueue { @Test
public void testQueue(){
try {
System.in.read();
} catch (IOException e) { e.printStackTrace();
}
}
}
3.2 发布/订阅模式
3.2.1 消息生产者
(1)在工程 springjms_producer 的 applicationContext-jms-producer.xml 增加配置
[AppleScript] 纯文本查看 复制代码
<!--这个是订阅模式 文本信息-->
<bean id="topicTextDestination" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg value="topic_text"/>
</bean>
(2)创建生产者类
[AppleScript] 纯文本查看 复制代码
@Component
public class TopicProducer { @Autowired
private JmsTemplate jmsTemplate;
@Autowired
private Destination topicTextDestination;
/**
*发送文本消息
*@param text
*/
public void sendTextMessage(final String text){ jmsTemplate.send(topicTextDestination, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(text);
}
});
}
}
(3)编写测试类
[AppleScript] 纯文本查看 复制代码
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 cn.itcast.demo.TopicProducer; @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext-activemq-producer.xml ")
public class TestTopic { @Autowired
private TopicProducer topicProducer; @Test
public void sendTextQueue(){ topicProducer.sendTextMessage();
}
}
3.2.1 消息消费者
(1)在 activemq-spring-consumer 工 程 中 创 建 配 置 文 件
applicationContext-jms-consumer-topic.xml
[AppleScript] 纯文本查看 复制代码
<!-- 真正可以产生 Connection 的 ConnectionFactory,由对应的 JMS 服务厂商提供-->
<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://192.168.25.135: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="cn.itcast.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>
(2)编写测试类
[AppleScript] 纯文本查看 复制代码
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext-jms-consumer-topic.xm l")
public class TestTopic { @Test
public void testTopic(){
try {
System.in.read();
} catch (IOException e) { e.printStackTrace();
}
}
}
测试:同时运行三个消费者工程,在运行生产者工程,查看三个消费者工程的控制台输出。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |