分布式-信息方式-ActiveMQ结合Spring

ActiveMQ结合 Spring开发
■ Spring提供了对JMS的支持,需要添加 Spring支持jms的包,如下:

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

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

代码如下:

pom.xml

<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.mq.test</groupId>
  <artifactId>activeMQ</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

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

<!-- 设置公共属性,可以被引用 ${attribute} -->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <junit.version>4.11</junit.version>
    <spring.version>3.2.0.RELEASE</spring.version>
    <httpclient.version>4.3.1</httpclient.version>
  </properties> 

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-all</artifactId>
    </dependency>
     <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-pool</artifactId>
    </dependency>
       <!-- spring 核心JAR包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.4.RELEASE</version>
        </dependency>
        <!-- spring事务 https://mvnrepository.com/artifact/org.springframework/spring-tx -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.3.4.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.3.4.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.3.4.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.4.RELEASE</version>
        </dependency>
         <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>4.3.4.RELEASE</version>
        </dependency>

         <dependency>
             <groupId>org.aspectj</groupId>
             <artifactId>aspectjrt</artifactId>
             <version>1.7.4</version>
         </dependency>
  </dependencies>
  <dependencyManagement>
      <dependencies>
          <dependency>
              <groupId>org.apache.activemq</groupId>
              <artifactId>activemq-all</artifactId>
              <version>5.11.1</version>
          </dependency>
          <dependency>
              <groupId>org.apache.activemq</groupId>
              <artifactId>activemq-jms-pool</artifactId>
              <version>5.11.1</version>
          </dependency>
          <dependency>
              <groupId>org.apache.activemq</groupId>
              <artifactId>activemq-pool</artifactId>
              <version>5.11.1</version>
          </dependency>
          <dependency>
              <groupId>org.apache.activemq</groupId>
              <artifactId>activemq-client</artifactId>
              <version>5.11.1</version>
          </dependency>
             <!-- spring 核心JAR包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.4.RELEASE</version>
        </dependency>
        <!-- spring事务 https://mvnrepository.com/artifact/org.springframework/spring-tx -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.3.4.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.3.4.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.3.4.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.4.RELEASE</version>
        </dependency>
      </dependencies>
  </dependencyManagement>
</project>
<?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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.2.xsd"
    default-autowire="byName" default-lazy-init="false">

    <context:component-scan base-package="com.mq.test.activeMQ">
          <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
    <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://localhost:61616</value>
                   </property>
             </bean>
        </property>
        <property name="maxConnections" value="100"></property>
    </bean>

    <!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->
    <!-- 队列模板 -->
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
        <property name="connectionFactory" ref="jmsFactory"/>
        <property name="defaultDestination" ref="destination"></property>
        <property name="messageConverter">
             <bean class="org.springframework.jms.support.converter.SimpleMessageConverter"></bean>
        </property>
    </bean>
     <bean id="destination" class="org.apache.activemq.command.ActiveMQQueue"  >
            <constructor-arg index="0" value="spring-queue"></constructor-arg>
     </bean>
     <!--
    <bean  id="broker" class="org.apache.activemq.broker.BrokerService" init-method="start" destroy-method="stop">
         <property name="brokerName" value="myBroker" />
         <property name="persistent" value="false"></property>
         <property name="transportConnectorURIs"  >
                 <list>
                      <value>tcp://localhost:61616</value>
                 </list>
         </property>
    </bean>
    -->

</beans>

信息发送者

package com.mq.test.activeMQ.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.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Service;
@Service
public class QueueSender {
  @Autowired
   private JmsTemplate jt=null;
   public static void main(String[] args) {
       ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
       QueueSender  ct=  (QueueSender) ctx.getBean("queueSender");
       ct.jt.send(new MessageCreator() {
        public Message createMessage(Session s) throws JMSException {
             TextMessage msg=s.createTextMessage("Spring msg===");
            return msg;
        }
    });
   }
}

信息消费者

package com.mq.test.activeMQ.spring;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;

@Service
public class QueueReceiver {
    @Autowired
       private JmsTemplate jt=null;
       public static void main(String[] args) {
           ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
           QueueReceiver ct= (QueueReceiver) ctx.getBean("queueReceiver");
           String msg=(String) ct.jt.receiveAndConvert();
           System.out.println("msg===="+msg);

       }
}

■如果 topic的话,首先需要修改 spring的配置:
先添加 topic的配置,当然,需要修改 jmsTemplate配置里面的
defaultDestination,如果不想修改这个配置,那么直接把 Destination注入程序,在程序
里面选择发送的 Destination也可以

<bean id="destinationtopic" class="org.apache.activemq.command.ActiveMQTopic" >
<constructor-arg index="0" value="spring-topic"></constructor-arg>
</bean>

其他的客户端发送和接收跟队列基本是一样的。
■如果想要在 Spring中配置消费者的话,就不需要再启动接收的客户端了,配置如下:

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
<property name="connectionFactory" ref="jmsFactory"/>
<property name="defaultDestination" ref="destinationtopic"></property>
<property name="messageConverter">
<bean class="org.springframework.jms.support.converter.SimpleMessageConverter"></bean>
</property>
</bean>

代码如下:

package com.mq.test.activeMQ.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.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Service;
@Service
public class TopicSender {
  @Autowired
   private JmsTemplate jt=null;
   public static void main(String[] args) {
       ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
       TopicSender  ct=  (TopicSender) ctx.getBean("topicSender");
       ct.jt.send(new MessageCreator() {
        public Message createMessage(Session s) throws JMSException {
             TextMessage msg=s.createTextMessage("Spring msg===");
            return msg;
        }
    });
   }
}
package com.mq.test.activeMQ.spring;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;

@Service
public class TopicReceiver {
    @Autowired
       private JmsTemplate jt=null;
       public static void main(String[] args) {
           ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
           TopicReceiver ct= (TopicReceiver) ctx.getBean("topicReceiver");
           String msg=(String) ct.jt.receiveAndConvert();
           System.out.println("msg===="+msg);

       }
}

原文地址:https://www.cnblogs.com/caoyingjielxq/p/9342563.html

时间: 2024-11-06 03:32:38

分布式-信息方式-ActiveMQ结合Spring的相关文章

分布式-信息方式-ActiveMQ静态网络连接信息回流功能

"丢失"的消息 有这样的场景, broker1和 broker2通过 netwoskconnector连接,一些 consumers连接到 broker1,消费 broker2上的消息.消息先被 broker1从 broker2上消费掉,然后转发给这些 consumers.不幸的是转发部分消息的时候 broker1重启了,这些 consumer发现 broker1连接失败,通过 failover连接到 broker2上去了,但是有一部分他们还没有消费的消息被 broker2已经分发到了

JAVAEE——宜立方商城09:Activemq整合spring的应用场景、添加商品同步索引库、商品详情页面动态展示与使用缓存

1. 学习计划 1.Activemq整合spring的应用场景 2.添加商品同步索引库 3.商品详情页面动态展示 4.展示详情页面使用缓存 2. Activemq整合spring 2.1. 使用方法 第一步:引用相关的jar包. <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> </dependency> &l

ActiveMQ结合Spring收发消息

直接使用 ActiveMQ 的方式需要重复写很多代码,且不利于管理,Spring 提供了一种更加简便的方式----Spring JMS ,通过它可以更加方便地使用 ActiveMQ. Maven 依赖结合Spring使用ActiveMQ的依赖如下: ActiveMQ.xml 文件 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.o

注解方式定义的spring component打jar后,扫描失败的可能原因

情况是这样的:web工程采用了ssh框架,dao和service都是通过annotation方式注入的,工程运行正常.后来把service和dao打成jar放在工程的lib目录下,问题来了,配置没改动,结果就是不能自动注入dao和service.但是如果把dao和service在spring配置文件中通过xml文件配置,这些component能找到. 搜索了一把,发现这个问题比较常见,大部分帖子说的是在打jar包的时候add entity directory,仔细看了下,我的jar包是通过mav

Apache Spark探秘:三种分布式部署方式比较

目前Apache Spark支持三种分布式部署方式,分别是standalone.spark on mesos和 spark on YARN,其中,第一种类似于MapReduce 1.0所采用的模式,内部实现了容错性和资源管理,后两种则是未来发展的趋势,部分容错性和资源管理交由统一的资源管理系统完成:让Spark运行在一个通用的资源管理系统之上,这样可以与其他计算框架,比如MapReduce,公用一个集群资源,最大的好处是降低运维成本和提高资源利用率(资源按需分配).本文将介绍这三种部署方式,并比

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&g

分布式定时任务框架比较,spring batch, tbschedule jobserver

分布式定时任务框架比较,spring batch, tbschedule jobserver | 移动开发参考书 分布式定时任务框架比较,spring batch, tbschedule jobserver

获取登录域帐号信息方式之 —-IIS(VB)

前言 java web 项目如何获取客户端登录帐号信息(用于SSO或其他) 之前总结过一篇在Java 的Web 项目中获取客户端帐号信息的文章.参见以上链接的内容. 除了那些方式之外, 还可以使用IIS 和VB  来获取客户端域帐号信息. (这里介绍的使用场景还是在Java web 项目中使用IIS 和VB 的方式来获取域帐号信息.) 实际使用场景 环境状况 1. Java web 项目, 部署在 机器A 的tomcat 上(不在域) 2. IIS 服务器, 在机器B 上(在域上) 3. 客户端

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&g