ActiveMQ(06):ActiveMQ结合Spring开发--第二种方式

一、pom.xml与mq.properties

Spring提供了对JMS的支持,需要添加Spring支持jms的包,如下:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jms</artifactId>
    <version>4.1.7.RELEASE</version>
</dependency>

添加ActiveMQ的pool包,如下:

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-pool</artifactId>
    <version>5.11.1</version>
</dependency>

添加xbean的标签配置,如下:

<dependency>
    <groupId>org.apache.xbean</groupId>
    <artifactId>xbean-spring</artifactId>
    <version>3.16</version>
</dependency>

mq.properties:

activemq.brokerURL=tcp://192.168.91.8:61616
activemq.userName=liuy
activemq.password=123456
activemq.maxConnections=100
activemq.destination.name=spring-queue
activemq.destinationTopic.name=spring-topic

二、mq.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context" 
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop" 
       xmlns:tx="http://www.springframework.org/schema/tx"
       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-4.0.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd
	">
	<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>${activemq.brokerURL}</value>
		    </property>
		    <property name="userName" value="${activemq.userName}"></property>
            	    <property name="password" value="${activemq.password}"></property> 
		</bean>
	    </property>
	    <property name="maxConnections" value="${activemq.maxConnections}"></property>
	</bean>
	<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
	    <property name="connectionFactory" ref="jmsFactory" />
	    <!-- 设置默认的目的地 -->
	    <property name="defaultDestination" ref="destinationTopic" />
	    <property name="messageConverter">
	        <bean class="org.springframework.jms.support.converter.SimpleMessageConverter" />
	    </property>
	</bean>
	<!-- 目的地:Queue -->
	<bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">
	    <constructor-arg name="name" value="${activemq.destination.name}" />
	</bean>
	<!-- 目的地:Topic,非持久化 -->
	<bean id="destinationTopic" class="org.apache.activemq.command.ActiveMQTopic">
	    <constructor-arg name="name" value="${activemq.destinationTopic.name}" />
	</bean>
</beans>


三、消息发送与接收

package com.liuy.spring;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Service;

/**
 * @description 描述
 * @author liuyu
 * @version 1.0
 * @date:2017年4月11日下午8:32:46
 */
@Service
public class MQService {
    @Autowired
    private JmsTemplate jt;
    
    /**发送*/
    public void send(String message) {
        jt.send(new MessageCreator() {
	    public Message createMessage(Session s) throws JMSException {
	        TextMessage msg = s.createTextMessage(message);
		return msg;
	    }
	});
    }
    
    /**接收*/
    public void receiver() {
        String msg = (String)jt.receiveAndConvert();
	System.out.println("msg==="+msg);
    }
}

四、监听器

如果想要在Spring中配置消费者的话,就不需要再启动接收的客户端了,配置如下:

<!-- 消费者监听器 -->
<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="jmsFactory" />
    <!-- 监听的目的地 -->
    <property name="destination" ref="destinationTopic" />
    <property name="messageListener" ref="messageListener" />
</bean>
<bean id="messageListener" class="com.liuy.spring.b.listener.MyMessageListener"></bean>
package com.liuy.spring.b.listener;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

/**
 * @description 描述
 * @author liuyu
 * @version 1.0
 * @date:2017年4月15日上午11:00:23
 */
public class MyMessageListener implements MessageListener {

    @Override
    public void onMessage(Message message) {
        TextMessage msg = (TextMessage) message;
	try {
	    System.out.println("receive txt msg===" + msg.getText());
        } catch (JMSException e) {
	    e.printStackTrace();
        }
    }

}
时间: 2024-10-17 19:01:07

ActiveMQ(06):ActiveMQ结合Spring开发--第二种方式的相关文章

关于整合spring+mybatis 第二种方式

和第一种方式一样的步骤,不过bean.xml中有些许差异 <!-- 配置sqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property&g

Struts1.X与Spring集成——第二种方案

上篇博客介绍了Struts1.X与Spring集成的一种方案.Struts1.X与Spring集成--第一种方案 此篇博客还以上篇博客的登录例子为例,介绍Struts1.X与Spring集成的另一种方案. 1,第一种方案 原理 回忆第一种方案集成原理:在Action中取得BeanFactory,通过BeanFactory取得业务逻辑对象 此种方案的缺点:从严格意义的分层上来看,Action上看到了Spring的相关东西,依赖Spring API去查找东西,发生了依赖查找,因为要查找依赖对象,所以

创建对象的第二种方式:克隆clone,要实现Cloneable接口

1 ackage com.wisezone.clone; 2 3 /** 4 * 空接口: 5 * 标识,告诉JVM,通行 6 * 1.克隆 7 * 2.序列化 8 * 9 * 创建对象的第二种方式:克隆clone,要实现Cloneable 10 * @author 王东海 11 * @2017年4月15日 12 */ 13 public class TestClone implements Cloneable 14 { 15 public String name; 16 17 public s

软件开发有多少种方式

软件开发有多少种方式: Build To Learn Build To Show Build To Serve Build To Win 其中Build To Win是我们所学习的构建之法中的核心思想.软件开发是为了什么,是为了市场.赢得了市场,就是这个软件最大的成功.当然一个软件能够成功.就需要在工作中一视同仁,不能有高低贵贱之分.听取小组中每位成员的建议.并且每位程序员也能有很强的工作能力,所以我们必须要在平时的学习在加强对工作能力的训练.为未来的就业打好基础!

js最基础知识回顾2(函数传参,操作属性的第二种方式,提取行间事件,操作一组元素,this,焦点问题和鼠标按下抬起,选项卡)

一.函数传参     1.函数传参:参数就是占位符----函数里定不下来的东西 a. var a1=function(){ alert(123); }; function a(f){ // 相当于 f=a1 f(); }; a(a1); b.  function skip(skipPath){  //换肤 var oLink1 = document.getElementById('link1'); oLink1.href=skipPath; } c.   function setStyle(na

GitHub 多人协作开发 三种方式:

GitHub 多人协作开发 三种方式: 一.Fork 方式 网上介绍比较多的方式(比较大型的开源项目,比如cocos2d-x) 开发者 fork 自己生成一个独立的分支,跟主分支完全独立,pull代码后,项目维护者可根据代码质量决定是否merge代码 此方式网上方法比较多,这里不详细描述 二.组织 组织的所有者可以针对不同的代码仓库建立不同访问权限的团队. Accounts Settings => Organizations =>Create new Organizations 新建一个组织

Java创建线程的第二种方式:实现runable接口

/*需求:简单的卖票程序多个窗口买票 创建线程的第二种方式:实现runable接口 *//*步骤1.定义类实现Runable接口2.覆盖Runable接口中的run方法    将线程要运行的代码存放在该run方法中 3.通过Thread类建立线程对象4.将Runable接口的子类对象作为实际参数传递给Thread类的构造函数  为什么要将Runable接口的子类对象传递给Thread的构造函数.  因为,自定义的run方法所属的对象是Runable接口的子类对象  所以要让线程去指定对象的Run

创建线程的第二种方式------实现Runnable接口的方式

package cn.itcast.demo16.Demo07.Runnable; /** * @author newcityman * @date 2019/7/22 - 23:17 */public class RunnableImpl implements Runnable { @Override public void run() { for (int i = 0; i <20 ; i++) { System.out.println(Thread.currentThread().getN

Spring IOC 几种方式 总结

Spring框架是目前各大Java开发者追捧的框架之一,相信对于大家来说并不陌生,Spring之所以这么流行,少不了他的两大核心技术IOC和IOP.我们这里重点讲述Spring框架的IOC技术.在我们平 常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一 管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中. 依赖