activemq小案例

<!-- activeMQ坐标 -->

<dependency>  

            <groupId>junit</groupId>  

            <artifactId>junit</artifactId>  

            <version>4.10</version>  

            <scope>test</scope>  

        </dependency>  

        <dependency>  

            <groupId>org.springframework</groupId>  

            <artifactId>spring-context</artifactId>  

        </dependency>  

        <dependency>  

            <groupId>org.springframework</groupId>  

            <artifactId>spring-jms</artifactId>  

        </dependency>  

        <dependency>  

            <groupId>org.springframework</groupId>  

            <artifactId>spring-test</artifactId>  

        </dependency>  

        <dependency>  

            <groupId>javax.annotation</groupId>  

            <artifactId>jsr250-api</artifactId>  

            <version>1.0</version>  

        </dependency>  

        <dependency>  

            <groupId>org.apache.activemq</groupId>  

            <artifactId>activemq-core</artifactId>  

            <version>5.7.0</version>  

        </dependency> 

</dependencies>

 

 

Spring-activemq.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:aop="http://www.springframework.org/schema/aop" 

xmlns:tx="http://www.springframework.org/schema/tx" 

xmlns:context="http://www.springframework.org/schema/context" 

xmlns:task="http://www.springframework.org/schema/task"

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.xsd

          http://www.springframework.org/schema/task

          http://www.springframework.org/schema/task/spring-task.xsd">

    <!-- 扫描com.cn将其标注的注解纳入spring进行管理 -->

  <context:component-scan base-package="com.cn" />  

      

    <!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->  

    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">  

        <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->  

        <property name="connectionFactory" ref="connectionFactory"/>  

        <!-- 非pub/sub模型(发布/订阅),即队列模式 -->

        <property name="pubSubDomain" value="false" />

         <!-- pub/sub模型(发布/订阅),即队列模式

        <property name="pubSubDomain" value="true" />-->

    </bean>     

    <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供-->  

    <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">  

        <property name="brokerURL" value="tcp://localhost:61616"/>  

        <property name="userName" value="admin"/>  

        <property name="password" value="admin"/>  

    </bean>  

       

    <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->  

    <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">  

        <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->  

        <property name="targetConnectionFactory" ref="targetConnectionFactory"/>  

    </bean>  

       

    <!--这个是队列目的地-->  

    <bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">  

        <constructor-arg>  

            <value>queue</value>  

        </constructor-arg>  

    </bean>  

    <!-- 消息监听器 -->  

    <bean id="consumerMessageListener" class="com.cn.activemq.ConsumerMessageListener"/>  

    <!-- 消息监听容器 -->    

    <bean id="jmsContainer"  

        class="org.springframework.jms.listener.DefaultMessageListenerContainer">  

        <property name="connectionFactory" ref="connectionFactory" />  

        <property name="destination" ref="queueDestination" />  

        <property name="messageListener" ref="consumerMessageListener" />  

    </bean> 

</beans>

 

ProducerService接口 

package com.cn.activemq;

 

import javax.jms.Destination;

public interface ProducerService {

 public void sendMessage(Destination destination, final String message);

}

 

ProducerServiceimpl实现类

package com.cn.activemq;

import javax.annotation.Resource;

import javax.jms.Destination;

import javax.jms.JMSException;

import javax.jms.Message;

import javax.jms.Session;

 

import org.springframework.jms.core.JmsTemplate;

import org.springframework.jms.core.MessageCreator;

import org.springframework.stereotype.Component;

@Component

public class ProducerServiceImpl implements ProducerService {

private JmsTemplate jmsTemplate;

public JmsTemplate getJmsTemplate() {

return jmsTemplate;

}

@Resource

public void setJmsTemplate(JmsTemplate jmsTemplate) {

this.jmsTemplate = jmsTemplate;

}

@Override

public void sendMessage(Destination destination, String message) {

System.out.println("--------------生产者要发信息----------------");

System.out.println("生产者发了一个信息"+message);

jmsTemplate.send(destination,new MessageCreator() {

@Override

public Message createMessage(Session session) throws JMSException {

return session.createTextMessage(message);

}

});

}

}

 

ConsumerMessageListener监听

package com.cn.activemq;

import javax.jms.JMSException;

import javax.jms.Message;

import javax.jms.MessageListener;

import javax.jms.TextMessage;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class ConsumerMessageListener implements MessageListener {

private static Logger log = LoggerFactory.getLogger(ConsumerMessageListener.class);

@Override

public void onMessage(Message message) {

//这里我们知道生产者发送的就是一个消息,

//所以这里可以直接进行强制转换,或者直接g把onMessae方法的参数

//改成Message的子类TextMessage  

TextMessage mes = (TextMessage)message;

System.out.println("接收到路径");

log.info("接收到路径");

try {

System.out.println(" 路径是:"+mes.getText());

log.info("路径是:"+mes.getText());

} catch (JMSException e) {

e.printStackTrace();

}

}

}

Test测试

 

package test;

import javax.jms.Destination;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.cn.activemq.ProducerService;

@RunWith(SpringJUnit4ClassRunner.class)   

@ContextConfiguration(locations={"classpath:spring/spring-*.xml"})  

public class Testte {       

    @Autowired  

    private ProducerService producerService;   

    @Autowired  

    @Qualifier("queueDestination")   

    private Destination destination;          

    @Test

    public void testSend() {   

        for (int i=0; i<2; i++) {   

            producerService.sendMessage(destination, "你好,生产者!这是消息:" + (i+1));   

        }   

    }   

       

}

 

 

 

 

posted @ 2019-09-05 20:51  sea-gull  阅读(140)  评论(0编辑  收藏  举报