在Spring下集成ActiveMQ

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());                } else                    break;            } 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"?><beans    xmlns="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>

时间: 2024-10-12 18:00:13

在Spring下集成ActiveMQ的相关文章

Spring下集成ActiveMQ推送

本文是将ActiveMQ消息制造者集成进spring,通过spring后台推送消息的实现. 首先是spring的applicationContext的配置,如下 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/200

在spring环境下集成ActiveMQ

1.参考文献 Spring集成ActiveMQ配置 Spring JMS异步发收消息 ActiveMQ 2.环境 在前面的一篇ActiveMQ入门实例中我们实现了消息的异步传送,这篇博文将如何在spring环境下集成ActiveMQ.如果要在spring下集成ActiveMQ,那么就需要将如下jar包导入项目: 本文有两篇参考文献,因此有两个实例,项目结构如下图所示: 3.实例1 信息发送者:HelloSender.java package edu.sjtu.erplab.springactiv

Spring Boot集成ActiveMQ

在Spring Boot中集成ActiveMQ相对还是比较简单的,都不需要安装什么服务,默认使用内存的activeMQ,当然配合ActiveMQ Server会更好.在这里我们简单介绍怎么使用,本节主要分以下几个步骤: (1) 新建Maven Java Project; (2) 在pom.xml引入依赖: (3) 编码测试 (4) 配置信息 接下来看看各个步骤的操作: (1) 新建Maven Java Project; 新建一个工程取名为spring-boot-activemq (2) 在pom

Spring boot 集成ActiveMQ(包含双向队列实现)

集百家之长,成一家之言.  1. 下载ActiveMQ https://mirrors.tuna.tsinghua.edu.cn/apache//activemq/5.15.9/apache-activemq-5.15.9-bin.zip 2.新建 Maven 项目 activemq 3.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001

Spring集成ActiveMQ配置 --转

转自:http://suhuanzheng7784877.iteye.com/blog/969865 集成环境 Spring采用2.5.6版本,ActiveMQ使用的是5.4.2,从apache站点可以下载.本文是将Spring集成ActiveMQ来发送和接收JMS消息. 集成步骤 将下载的ActiveMQ解压缩后文件夹如下 activemq-all-5.4.2.jar是activemq的所有的类jar包.lib下面是模块分解后的jar包.将lib下面的 Java代码 /lib/activati

Spring集成Activemq使用(未完待续)

现在任何一个框架的使用都会结合spring框架,quartz.cxf与平时常见的Hibernate.mybatis.Struts等都可以与spring集成起来使用,在这里研究了activemq结合spring的使用方法. 1.理论篇 spring集成JMS连接ActiveMq ConnectionFactory:用于管理连接的工厂(Spring为我们提供的连接池,因为JmsTemplate每次发消息都会重新创建连接.会话和producer,这个操作非常消耗性能,所以Spring提供了连接池) s

SpringMVC+Spring+Mybatis -- 集成之旅

准备 首先介绍一下,我的工具使用的是STS, 需要的童鞋可以到官网下载:http://spring.io/tools/sts/all 使用STS是因为她集成了Maven进行 “包“ 管理以及自带 Web server 方便部署(不用配置啦~),个人感觉还是挺方便的.如果大家想要自己配置Tomcat,也未尝不可 :) 我下载的是压缩包的STS,下载完成后解压缩 -> 启动STS.exe ->指定 workspace ->创建Maven项目 -> 选择建立 webapp 项目. 等待片

Spring jms 与 ActiveMq初识

Spring JMS 与 ActiveMQ初识 1.1 Spring jms 与 ActiveMQ简介 jms 的全称是 Java Message Service,其主要作用是在生产者与消费者之间进行消息的传递:实际业务场景下,当A系统完成某项业务操作后,需要通知B系统或者其他任意系统 A系统操作完成的状态,以及操作中涉及到的相关信息,比如 当会员卡发放系统完成给用户绑定一张会员卡的操作之后,可以发出一条消息,消息内容是 uid或phone为XXX的用户,绑定了一张XX类型(普通卡.贵宾卡等)的

Redis 缓存 + Spring 的集成示例(转载)

1. 依赖包安装 pom.xml 加入: <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.6.0.RELEASE</version> </dependency> <dependency> <groupId>redis