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

<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 包下创建消息生产者类

@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 创建测试类

@RunWith(SpringJUnit4Cla***unner.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

<!--  真正可以产生 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)编写监听类

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)创建测试类

@RunWith(SpringJUnit4Cla***unner.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 增加配置

<!--这个是订阅模式 文本信息-->

<bean  id="topicTextDestination" class="org.apache.activemq.command.ActiveMQTopic">

<constructor-arg  value="topic_text"/>

</bean>
(2)创建生产者类

@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)编写测试类

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.SpringJUnit4Cla***unner; import  cn.itcast.demo.TopicProducer; @RunWith(SpringJUnit4Cla***unner.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

<!--  真正可以产生 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)编写测试类

@RunWith(SpringJUnit4Cla***unner.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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值