A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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();
}

}

}
测试:同时运行三个消费者工程,在运行生产者工程,查看三个消费者工程的控制台输出。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马