2019独角兽企业重金招聘Python工程师标准>>>

1.参考文献

  1. Spring集成ActiveMQ配置
  2. Spring JMS异步发收消息 ActiveMQ

2.环境

在前面的一篇 ActiveMQ入门实例中我们实现了消息的异步传送,这篇博文将如何在spring环境下集成ActiveMQ。如果要在spring下集成ActiveMQ,那么就需要将如下jar包导入项目:

本文有两篇参考文献,因此有两个实例,项目结构如下图所示:

3.实例1

信息发送者:HelloSender.java

package edu.sjtu.erplab.springactivemq;

import javax.jms.JMSException;import javax.jms.Session;

import javax.jms.Destination;import javax.jms.Message;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.jms.core.JmsTemplate;import org.springframework.jms.core.MessageCreator;

public class HelloSender {

/**     * @param args     * jmsTemplate和destination都是在spring配置文件中进行配制的     * Sender只使用了配置文件中的jmsFactory,jmsTemplate,还有destination这三个属性*/public static void main(String[] args) {        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-jms.xml");        JmsTemplate template = (JmsTemplate) applicationContext.getBean("jmsTemplate");        Destination destination = (Destination) applicationContext.getBean("destination");        template.send(destination, new MessageCreator() {public Message createMessage(Session session) throws JMSException {return session.createTextMessage("发送消息:Hello ActiveMQ Text Message2!");            }        });        System.out.println("成功发送了一条JMS消息");    }}

信息接受者:ProxyJMSConsumer.java

package edu.sjtu.erplab.springactivemq;

import javax.jms.Destination;import javax.jms.TextMessage;

import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.jms.core.JmsTemplate;

/** * JMS消费者 * 消息题的内容定义 * 消息对象 接收消息对象后: 接收到的消息体* <p> */public class ProxyJMSConsumer {

public ProxyJMSConsumer() {

    }private JmsTemplate jmsTemplate;

public JmsTemplate getJmsTemplate() {return jmsTemplate;    }public void setJmsTemplate(JmsTemplate jmsTemplate) {this.jmsTemplate = jmsTemplate;    }

/**     * 监听到消息目的有消息后自动调用onMessage(Message message)方法*/public void recive() {        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-jms.xml");        Destination destination = (Destination) applicationContext.getBean("destination");while (true) {try {                TextMessage txtmsg = (TextMessage) jmsTemplate                        .receive(destination);if (null != txtmsg) {                    System.out.println("[DB Proxy] " + txtmsg);                    System.out.println("[DB Proxy] 收到消息内容为: "                            + txtmsg.getText());                } elsebreak;            } catch (Exception e) {                e.printStackTrace();            }

        }    }

}

客户端:JMSTest.java

package edu.sjtu.erplab.springactivemq;

import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;

public class JMSTest {

/**     * @param args*/public static void main(String[] args) {        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-jms.xml");        ProxyJMSConsumer proxyJMSConsumer = (ProxyJMSConsumer) applicationContext.getBean("messageReceiver");        proxyJMSConsumer.recive();

        System.out.println("初始化消息消费者");    }

}

Spring配置文件:applicationContext-jms.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"    xsi:schemaLocation="http://www.springframework.org/schema/beans         http://www.springframework.org/schema/beans/spring-beans-2.5.xsd         http://www.springframework.org/schema/context         http://www.springframework.org/schema/context/spring-context-2.5.xsd"    default-autowire="byName">

<!-- 配置connectionFactory --><bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory"        destroy-method="stop"><property name="connectionFactory"><bean class="org.apache.activemq.ActiveMQConnectionFactory"><property name="brokerURL"><value>tcp://127.0.0.1:61616</value></property></bean></property><property name="maxConnections" value="100"></property></bean>

<!-- Spring JMS Template --><bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"><property name="connectionFactory"><ref local="jmsFactory" /></property><property name="defaultDestinationName" value="subject" /><!-- 区别它采用的模式为false是p2p为true是订阅 --><property name="pubSubDomain" value="true" /></bean>

<!-- 发送消息的目的地(一个队列) --><bean id="destination" class="org.apache.activemq.command.ActiveMQTopic"><!-- 设置消息队列的名字 --><constructor-arg index="0" value="subject" /></bean>

<bean id="messageReceiver" class="edu.sjtu.erplab.springactivemq.ProxyJMSConsumer"><!--class="edu.sjtu.erplab.springactivemq.ProxyJMSConsumer">--><property name="jmsTemplate" ref="jmsTemplate"></property></bean>

</beans>

测试方法:首先运行JMSTest,然后运行HelloSender。

4.实例2

消息发送者: Sender

package edu.sjtu.erplab.springactivemq2;

import javax.jms.JMSException;import javax.jms.MapMessage;import javax.jms.Message;import javax.jms.Session;import org.springframework.jms.core.JmsTemplate;import org.springframework.jms.core.MessageCreator;

public class Sender {private JmsTemplate jmsTemplate;//getter and setter    public JmsTemplate getJmsTemplate() {return jmsTemplate;    }public void setJmsTemplate(JmsTemplate jmsTemplate) {this.jmsTemplate = jmsTemplate;    }

public void sendInfo() {        jmsTemplate.send(new MessageCreator() {public Message createMessage(Session session) throws JMSException {                MapMessage message = session.createMapMessage();                message.setString("lastName", "ppp");return message;            }

        });    }}

消息发送客户端:SenderTest

package edu.sjtu.erplab.springactivemq2;

import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SenderTest {public static void main(String[] args) {// TODO 自动生成方法存根        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");        Sender sender = (Sender) context.getBean("sender");        sender.sendInfo();    }}

消息接收者:Receiver

package edu.sjtu.erplab.springactivemq2;

import javax.jms.JMSException;import javax.jms.MapMessage;import org.springframework.jms.core.JmsTemplate;import org.springframework.jms.support.JmsUtils;

public class Receiver {private JmsTemplate jmsTemplate;//getter and setter    public JmsTemplate getJmsTemplate() {return jmsTemplate;    }public void setJmsTemplate(JmsTemplate jmsTemplate) {this.jmsTemplate = jmsTemplate;    }

/**     * 构造函数*/public Receiver() {    }

public String receiveMessage() {        String my = "";        MapMessage message = (MapMessage) jmsTemplate.receive();try {            my = message.getString("lastName");        } catch (JMSException e) {throw JmsUtils.convertJmsAccessException(e);        }return my;    }

}

消息接收客户端:ReceiverTest

package edu.sjtu.erplab.springactivemq2;

import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ReceiverTest {public static void main(String[] args) {// TODO 自动生成方法存根        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");        Receiver receiver = (Receiver) context.getBean("receiver");        System.out.print(receiver.receiveMessage());    }}

Spring配置文件:applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://www.springframework.org/schema/beans

    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"><!--创建连接工厂--><bean id="connectionFactory"        class="org.apache.activemq.ActiveMQConnectionFactory"><property name="brokerURL" value="tcp://localhost:61616"></property></bean><!-- 声明ActiveMQ消息目标,目标可以是一个队列,也可以是一个主题ActiveMQTopic--><bean id="destination" class="org.apache.activemq.command.ActiveMQQueue"><constructor-arg index="0" value="edu.sjtu.erplab.springactivemq2"></constructor-arg></bean><!----><bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"><property name="connectionFactory" ref="connectionFactory"></property><property name="defaultDestination" ref="destination"></property><property name="receiveTimeout" value="600"></property>

</bean><bean id="sender" class="edu.sjtu.erplab.springactivemq2.Sender"><property name="jmsTemplate" ref="jmsTemplate"></property>

</bean><bean id="receiver" class="edu.sjtu.erplab.springactivemq2.Receiver"><property name="jmsTemplate" ref="jmsTemplate"></property></bean></beans>

转载于:https://my.oschina.net/zhanghaiyang/blog/606519

ActiveMQ学习总结(3)——spring整合ActiveMQ相关推荐

  1. Spring整合ActiveMQ完成消息队列MQ编程

    <–start–> 第一步:新建一个maven,将工程命名为activeMQ_spring.在pom.xml文件中导入相关jar包. ①spring开发和测试相关的jar包: spring ...

  2. ActiveMQ —— Spring 整合 ActiveMQ

    前文 消息中间件 -- 简介 ActiveMQ 下载.安装 ActiveMQ -- Java 连接 ActiveMQ(点对点) ActiveMQ -- Java 连接 ActiveMQ(发布订阅 To ...

  3. java 消息队列详解_Java消息队列-Spring整合ActiveMq的详解

    本篇文章主要介绍了详解Java消息队列-Spring整合ActiveMq ,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 1.概述 首先和大家一起回顾一下Java 消息服 ...

  4. ActiveMQ学习总结(10)——ActiveMQ采用Spring注解方式发送和监听

    对于ActiveMQ消息的发送,原声的api操作繁琐,而且如果不进行二次封装,打开关闭会话以及各种创建操作也是够够的了.那么,Spring提供了一个很方便的去收发消息的框架,spring jms.整合 ...

  5. activimq java集成_Java消息队列-Spring整合ActiveMq

    1.概述 首先和大家一起回顾一下Java 消息服务,在我之前的博客<Java消息队列-JMS概述>中,我为大家分析了: 消息服务:一个中间件,用于解决两个活多个程序之间的耦合,底层由Jav ...

  6. Spring整合Activemq

    目录 一.Pom.xml 二.Spring配置文件 三.队列 四.主题 一.Pom.xml <dependencies><!-- activemq核心依赖包 --><de ...

  7. Java消息队列-Spring整合ActiveMq

    1.概述 首先和大家一起回顾一下Java 消息服务,在我之前的博客<Java消息队列-JMS概述>中,我为大家分析了: 消息服务:一个中间件,用于解决两个或多个程序之间的耦合,底层由Jav ...

  8. ActiveMQ学习笔记(21)----ActiveMQ集成Tomcat

    1. 监控和管理Broker Web Console 方式:直接访问ActiveMQ的管理页面:http://localhost:8161/admin,默认的用户名和密码是admin/admin.具体 ...

  9. Spring学习笔记:Spring整合Mybatis(mybatis-spring.jar)(二:mybatis整合spring)

    http://blog.csdn.net/qq598535550/article/details/51703190 二.Spring整合mybatis其实是在mybatis的基础上实现Spring框架 ...

最新文章

  1. 024_Progress进度条
  2. Redis cluster日常管理【一】
  3. ST17H26 tea加密java版本
  4. 前端学习(2148):webpack之图片的处理
  5. AtCoder - 4172 Modulo Summation 贪心
  6. 平面直角坐标系中的旋转公式_【数理之路】初中范围推导三角函数倍角正弦公式...
  7. token什么意思中文_gre是什么意思中文
  8. 黑马程序员 手写xaml界面系统维护
  9. 苹果cms V10模板/MXone Pro自适应影视电影网站模板
  10. 2020年这些正则应该被收藏(更新, 63条)
  11. DSA_常用10种算法(java数据结构与算法)
  12. Monaco Editor教程(十七):代码信息指示器CodeLens配置详解
  13. PYTHON处理年月日的英文转换
  14. BZOJ 1695 [Usaco2007 Demo]Walk the Talk 链表+数学
  15. Will you pity a beggar ? What do you think of them ?
  16. 工业互联网+5G 发展策略研究
  17. 农夫过河c语言算法,农夫过河
  18. 雅思在线模拟测试软件,上海雅思在线模拟测试
  19. 基于Python的Flask框架实现的寻宝通关游戏 课程论文+项目源码
  20. 微信小程序使用身份证识别

热门文章

  1. lammps计算聚合物例子_LAMMPS模拟聚合物结构,非晶态聚合物变形行为的模拟,纳米线变形模拟,单轴张力模拟,晶格参数计算...
  2. c语言程序设计安徽区笔试部分,2021年安徽省二级C语言程序设计笔试样题-20210419093521.doc-原创力文档...
  3. java.lang.StackOverflowError递归的栈溢出错误
  4. mysql orm c语言_【译】Simple MySQL ORM for C
  5. oracle 查询结果升序,Oracle学习日志-8(查询结果排序)
  6. springboot中接口实例化_AngularJs中控制器的定义,实例化,作用域范围
  7. verilog时钟翻转怎么写_verilog实时可调时钟代码
  8. json符号解释大全_牛年汪姓男孩高端大气的名字大全
  9. java 素数乘积,求助2424379123 = 两个素数的乘积,求这两个素数?
  10. sqoop同步时间戳到mysql_在sqoop导入中使用24小时时间戳