• 【ActiveMQ入门-8】ActiveMQ学习-与Spring集成


    概述:

    下面将介绍如何在Spring下集成ActiveMQ。
    消费者:同步接收;
    目的地:topic



    环境:

    主要包括4个文件:
    1. HelloSender.java;
    2. JMSTest.java;
    3. ProxyJMSConsumer.java;
    4. applicationContext-jms.xml(配置文件);
    需要使用的jar包如下:

    源文件:

    HelloSender.java
    1. package com.ll.springActiveMQ1;
    2. import javax.jms.Destination;
    3. import javax.jms.JMSException;
    4. import javax.jms.Message;
    5. import javax.jms.Session;
    6. import org.springframework.context.ApplicationContext;
    7. import org.springframework.context.support.ClassPathXmlApplicationContext;
    8. import org.springframework.jms.core.JmsTemplate;
    9. import org.springframework.jms.core.MessageCreator;
    10. public class HelloSender {
    11. /**
    12. * @param args
    13. * jmsTemplate和destination都是在spring配置文件中进行配制的
    14. * Sender只使用了配置文件中的jmsFactory,jmsTemplate,还有destination这三个属性
    15. */
    16. public static void main(String[] args) {
    17. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-jms.xml");
    18. JmsTemplate template = (JmsTemplate) applicationContext.getBean("jmsTemplate");
    19. Destination destination = (Destination) applicationContext.getBean("destination");
    20. template.send(destination, new MessageCreator() {
    21. public Message createMessage(Session session) throws JMSException {
    22. return session.createTextMessage("发送消息:Hello ActiveMQ Text Message2!");
    23. }
    24. });
    25. System.out.println("成功发送了一条JMS消息");
    26. }
    27. }

    ProxyJMSConsumer.java

    1. package com.ll.springActiveMQ1;
    2. import javax.jms.Destination;
    3. import javax.jms.TextMessage;
    4. import org.springframework.context.ApplicationContext;
    5. import org.springframework.context.support.ClassPathXmlApplicationContext;
    6. import org.springframework.jms.core.JmsTemplate;
    7. /**
    8. * JMS消费者 消息题的内容定义 消息对象 接收消息对象后: 接收到的消息体*
    9. * <p>
    10. */
    11. public class ProxyJMSConsumer {
    12. /**
    13. * 构造函数
    14. */
    15. public ProxyJMSConsumer() {
    16. }
    17. /**
    18. *
    19. */
    20. private JmsTemplate jmsTemplate;
    21. public JmsTemplate getJmsTemplate() {
    22. return jmsTemplate;
    23. }
    24. public void setJmsTemplate(JmsTemplate jmsTemplate) {
    25. this.jmsTemplate = jmsTemplate;
    26. }
    27. /**
    28. * 监听到消息目的有消息后自动调用onMessage(Message message)方法
    29. */
    30. public void recive() {
    31. ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
    32. "applicationContext-jms.xml");
    33. Destination destination = (Destination) applicationContext
    34. .getBean("destination");
    35. while (true) {
    36. try {
    37. //同步接收
    38. TextMessage txtmsg = (TextMessage) jmsTemplate
    39. .receive(destination);
    40. if (null != txtmsg) {
    41. System.out.println("[DB Proxy] " + txtmsg);
    42. System.out.println("[DB Proxy] 收到消息内容为: "
    43. + txtmsg.getText());
    44. } else {
    45. break;
    46. }
    47. } catch (Exception e) {
    48. e.printStackTrace();
    49. }
    50. }
    51. }
    52. }

    JMSTest.java

    1. package com.ll.springActiveMQ1;
    2. import org.apache.commons.logging.Log;
    3. import org.springframework.context.ApplicationContext;
    4. import org.springframework.context.support.ClassPathXmlApplicationContext;
    5. public class JMSTest {
    6. /**
    7. * @param args
    8. */
    9. public static void main(String[] args) {
    10. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-jms.xml");
    11. ProxyJMSConsumer proxyJMSConsumer = (ProxyJMSConsumer) applicationContext.getBean("messageReceiver");
    12. proxyJMSConsumer.recive();
    13. System.out.println("初始化消息消费者");
    14. }
    15. }


    配置文件:

    applicationContext-jms.xml
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    4. xsi:schemaLocation="http://www.springframework.org/schema/beans
    5. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    6. http://www.springframework.org/schema/context
    7. http://www.springframework.org/schema/context/spring-context-2.5.xsd"
    8. default-autowire="byName">
    9. <!-- 配置connectionFactory -->
    10. <bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
    11. destroy-method="stop">
    12. <property name="connectionFactory">
    13. <bean class="org.apache.activemq.ActiveMQConnectionFactory">
    14. <property name="brokerURL">
    15. <value>tcp://127.0.0.1:61616</value>
    16. </property>
    17. </bean>
    18. </property>
    19. <property name="maxConnections" value="100"></property>
    20. </bean>
    21. <!-- Spring JMS Template -->
    22. <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    23. <property name="connectionFactory">
    24. <ref local="jmsFactory" />
    25. </property>
    26. <property name="defaultDestinationName" value="subject" />
    27. <!-- 区别它采用的模式为false是p2p为true是订阅 -->
    28. <property name="pubSubDomain" value="true" />
    29. </bean>
    30. <!-- 发送消息的目的地(一个队列) -->
    31. <bean id="destination" class="org.apache.activemq.command.ActiveMQTopic">
    32. <!-- 设置消息队列的名字 -->
    33. <constructor-arg index="0" value="subject" />
    34. </bean>
    35. <bean id="messageReceiver" class="com.ll.springActiveMQ1.ProxyJMSConsumer">
    36. <property name="jmsTemplate" ref="jmsTemplate"></property>
    37. </bean>
    38. </beans>



    运行顺序:
    首先运行JMSTest,然后运行HelloSender。


    运行结果:



















    附件列表

    • 相关阅读:
      EC++学习笔记(五) 实现
      EC++学习笔记(三) 资源管理
      EC++学习笔记(一) 习惯c++
      EC++学习笔记(六) 继承和面向对象设计
      STL学习笔记(三) 关联容器
      STL学习笔记(一) 容器
      背包问题详解
      EC++学习笔记(二) 构造/析构/赋值
      STL学习笔记(四) 迭代器
      常用安全测试用例
    • 原文地址:https://www.cnblogs.com/ssslinppp/p/4468070.html
    Copyright © 2020-2023  润新知