第二章:ActiveMQ与spring的整合使用

第二章:ActiveMQ与spring的整合使用第二章:ActiveMQ与spring的整合使用

大家好,又见面了,我是你们的朋友全栈君。

在之前建好的工程的主目录下建一个resource目录,然后建一个配置文件,我这里是activeMq.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:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:amq="http://activemq.apache.org/schema/core"  
xmlns:jms="http://www.springframework.org/schema/jms"  
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/jms  
        http://www.springframework.org/schema/jms/spring-jms-4.0.xsd  
        http://activemq.apache.org/schema/core  
        http://activemq.apache.org/schema/core/activemq-core-5.8.0.xsd">  
	 <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 -->  
	 <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
	 	<property name="brokerURL" value="tcp://192.168.72.133:61616"></property>
	 </bean>
	  <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->  
	  <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
	  	 <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
	  	 <property name="targetConnectionFactory" ref="targetConnectionFactory"></property>
	  </bean>
	   <!-- 配置生产者 -->  
       <!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->  
       <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
       		<!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->  
       		<property name="connectionFactory" ref="connectionFactory"></property>
       </bean>
        <!--这个是队列目的地,点对点的 -->  
        <bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
        	<constructor-arg value="spring-queue"></constructor-arg>
        </bean>
         <!--这个是主题目的地,一对多的 --> 
         <bean id="topicDestination" class="org.apache.activemq.command.ActiveMQQueue">
         		<constructor-arg value="topic"/>
         </bean>
</beans>

maven pom文件如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.xiaoyexinxin</groupId>
	<artifactId>activeMQTest</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>activeMQTest</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		 <springframework>4.3.6.RELEASE</springframework>
	</properties>

	    <dependencies>  
          <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>3.8.1</version>
              <scope>test</scope>
          </dependency>
  
  
          <dependency>
              <groupId>jstl</groupId>
              <artifactId>jstl</artifactId>
              <version>1.2</version>
          </dependency>
  
          <dependency>
              <groupId>javax.servlet</groupId>
              <artifactId>javax.servlet-api</artifactId>
              <version>3.1.0</version>
          </dependency>
  
          <!-- spring -->
  
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-core</artifactId>
              <version>${springframework}</version>
          </dependency>
  
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-context</artifactId>
              <version>${springframework}</version>
          </dependency>
  
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-tx</artifactId>
              <version>${springframework}</version>
          </dependency>
  
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-webmvc</artifactId>
              <version>${springframework}</version>
          </dependency>
  
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-web</artifactId>
              <version>${springframework}</version>
          </dependency>
  
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-jms</artifactId>
              <version>${springframework}</version>
          </dependency>
  
  
          <!-- xbean -->
  
          <dependency>
              <groupId>org.apache.xbean</groupId>
              <artifactId>xbean-spring</artifactId>
              <version>3.16</version>
          </dependency>
  
          <dependency>
              <groupId>com.thoughtworks.xstream</groupId>
              <artifactId>xstream</artifactId>
              <version>1.3.1</version>
          </dependency>
  
          <!-- activemq -->
  
          <dependency>
              <groupId>org.apache.activemq</groupId>
              <artifactId>activemq-all</artifactId>
              <version>5.14.3</version>
          </dependency> 
  </dependencies>  
</project>

这里如果工程有感叹号,那么可能跟之前的jar有冲突,这里建议修改mavend本地仓库地址,即setting文件的配置:

第二章:ActiveMQ与spring的整合使用

换一个重新maven update试试。

测试代码:

package com.xiaoyexinxin.activeMQTest;



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

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

/**
 * 
 * @author liuxin
 * @date   2018年4月12日
 */
public class TestSpringActiveMq {

	@Test
	public void test() {
		//初始化一个spring容器
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:activeMq.xml"); 
		//从容器中获的JSMTemplate对象
		JmsTemplate jmsTemplate=(JmsTemplate) applicationContext.getBean("jmsTemplate");
		//从容器中获得一个Destination对象
		Queue queue=(Queue) applicationContext.getBean("queueDestination");
		//使用jmsTemplate对象发送消息,需要知道destination
		jmsTemplate.send(queue,new MessageCreator() {
			
			public Message createMessage(Session arg0) throws JMSException {
				// TODO Auto-generated method stub
				TextMessage message=arg0.createTextMessage("spring activemq test");
				return message;
			}
		});
	}
}

 运行上面的代码,我们可以看到我们刚才发送的消息在activemq的后台管理系统可以看到。

第二章:ActiveMQ与spring的整合使用


二,下面测试接收消息


工作中我们的项目都是由几个工程组成的,这几个工程之间的通讯就会用到mq了。所以这里我们新建一个用来接收消息的工程。建好后如下:

第二章:ActiveMQ与spring的整合使用

通发送一样加上pom依赖


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.xiaoyexinxin</groupId>
  <artifactId>activeMQTestConsumer</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>activeMQTestConsumer</name>
  <url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		 <springframework>4.3.6.RELEASE</springframework>
	</properties>

	    <dependencies>  
          <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>3.8.1</version>
              <scope>test</scope>
          </dependency>
  
  
          <dependency>
              <groupId>jstl</groupId>
              <artifactId>jstl</artifactId>
              <version>1.2</version>
          </dependency>
  
          <dependency>
              <groupId>javax.servlet</groupId>
              <artifactId>javax.servlet-api</artifactId>
              <version>3.1.0</version>
          </dependency>
  
          <!-- spring -->
  
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-core</artifactId>
              <version>${springframework}</version>
          </dependency>
  
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-context</artifactId>
              <version>${springframework}</version>
          </dependency>
  
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-tx</artifactId>
              <version>${springframework}</version>
          </dependency>
  
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-webmvc</artifactId>
              <version>${springframework}</version>
          </dependency>
  
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-web</artifactId>
              <version>${springframework}</version>
          </dependency>
  
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-jms</artifactId>
              <version>${springframework}</version>
          </dependency>
  
  
          <!-- xbean -->
  
          <dependency>
              <groupId>org.apache.xbean</groupId>
              <artifactId>xbean-spring</artifactId>
              <version>3.16</version>
          </dependency>
  
          <dependency>
              <groupId>com.thoughtworks.xstream</groupId>
              <artifactId>xstream</artifactId>
              <version>1.3.1</version>
          </dependency>
    <!-- activemq -->
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-all</artifactId>
        <version>5.14.3</version>
    </dependency> 
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

  
下面我们新建一个监听器类,该类继承自MessageListener,如下图所示。

package com.xiaoyexinxin.activeMQTestConsumer;

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

/**
 * 接收ActiveMQ发送的消
 * @author liuxin
 * @date   2018年4月14日
 */
public class MqConsumer implements MessageListener{

	public void onMessage(Message arg0) {
		// TODO Auto-generated method stub
		TextMessage textMessage=(TextMessage) arg0;
		String text;
		try {
			text = textMessage.getText();
			System.out.println(text);
		} catch (JMSException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

 
最后新建一个测试类,如下图所示。

package com.xiaoyexinxin.activeMQTestConsumer;


import java.io.IOException;


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


/**
 * 
 * @author liuxin
 * @date   2018年4月14日
 */
public class TestSpringActiveMQ {
	
	public static void main(String[] args) {
	  //初始化Spring容器  
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext-activemq.xml");  
        
	}


}

直接运行测试类就能够接收到上面生产的消息了。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106158.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 计算机组成原理变形补码计算题_原码反码补码例题详解

    计算机组成原理变形补码计算题_原码反码补码例题详解22.已知x和y,用变形补码计算x-y,同时指出结果是否溢出。(1)x=11011,y=-11111(2)x=10111,y=11011(3)x=11011,y=-1001124.已知x和y,用变形补码计算x+y,同时指出结果是否溢出。(1)x=11011,y=00011(2)x=11011,y=-10101(3)x=-10110,y=-00001#include<bits/stdc++.h>usingnamespace…

    2022年8月30日
    7
  • Windows API——CFile, read, write,typeBinary函数「建议收藏」

    Windows API——CFile, read, write,typeBinary函数「建议收藏」文件操作API和CFile类在VC中,操作文件的方法有两种,一是利用一些API函数来创建,打开,读写文件,另外一个是利用MFC的CFile类,CFile封装了对文件的一般操作。下面酒主要介绍如何利用这两种方法操作文件。1.创建或打开一个文件API函数CreateFile可打开和创建文件、管道、邮槽、通信服务、设备以及控制台,但是在此时只是介绍用这个函数怎么实现创建和打开一个文件。HANDL…

    2022年8月18日
    8
  • mysql好还是oracle好_oracle优缺点

    mysql好还是oracle好_oracle优缺点Oracle与MySQL的区别以及优缺点MySQL的特点1、性能卓越,服务稳定,很少出现异常宕机;2、开放源代码无版本制约,自主性及使用成本低;3、历史悠久,社区和用户非常活跃,遇到问题及时寻求帮助;4、软件体积小,安装使用简单且易于维护,维护成本低;品牌口碑效应;5、支持多种OS,提供多种API接口,支持多种开发语言,对流行的PHP,Java很好的支持MySQL的缺点1、MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限才会发生改变;2

    2025年11月17日
    4
  • Unity Sprite Altas「建议收藏」

    Unity Sprite Altas「建议收藏」SpriteAtlas(精灵图集)SpriteAtlas针对现有的图集打包系统SpritePacker在性能和易用性上的不足,进行了全面改善。除此之外,相比SpritePacker,SpriteAtlas将对精灵更多的控制权交还给用户。由用户来掌控图集的打包过程以及加载时机,更加利于对系统性能的控制。SpriteAtlas的主要有以下三个功能:1.创建、编辑图集以及设定图集参数2.添加图集Variant(变种)3.运行时访问图集下面将通过具体案例来分别展示以上三个功能。创建

    2025年8月7日
    1
  • pycharm里为啥运行不了pip_error loading package list:pypi

    pycharm里为啥运行不了pip_error loading package list:pypi安装好了python以及pycharm,添加pysql时,第一次出现错误是pip版本不匹配,当前版本是9.0.1,需要更新至版本。更新版本需要找到easy_install.exe,在终端中执行:pipinstallpip–upgrade即可首先终端可用快捷键win+R打开,输入“cmd”,由于我的python是2.7版本,安装在D盘,输入“D:”,按enter键,继续输入“cdp…

    2022年8月27日
    3
  • Deep Boltzmann Machines

    Deep Boltzmann Machines转载自:http://blog.csdn.net/win_in_action/article/details/25333671 http://blog.csdn.net/zouxy09/article/details/8775518深度神经网络(Deepneuralnetwork)   深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构

    2022年7月13日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号