activemq笔记2--spring整合activemq

1、jar包

<!-- spring-jms 依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jms</artifactId>
      <version>4.3.10.RELEASE</version>
    </dependency>
    <!-- activemq依赖 -->
    <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-all</artifactId>
      <version>5.9.1</version>
    </dependency>
	<dependency>
      <groupId>org.apache.xbean</groupId>
      <artifactId>xbean-spring</artifactId>
      <version>4.6</version>
    </dependency>

2、配置文件
producer
(1)activemq-producer.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:jms="http://www.springframework.org/schema/jms"
       xmlns:amq="http://activemq.apache.org/schema/core"
       xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.3.xsd
            http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">

<!-- 配置ActiveMQConnectionFactory连接工厂对象 -->
    <amq:connectionFactory id="amqConnectionFactory" brokerURL="tcp://192.168.111.128:61616" userName="admin" password="admin"/>
    <!-- 配置connectionFactory的连接池信息 -->
    <bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory">
        <property name="connectionFactory" ref="amqConnectionFactory"></property>
        <property name="maxConnections" value="10"></property>
    </bean>
    <!-- 带有缓存功能的连接工厂,Session缓存大小可配置 -->
    <bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
        <property name="targetConnectionFactory" ref="pooledConnectionFactory"></property>
        <property name="sessionCacheSize" value="100"></property>
    </bean>
    <!-- 配置JmsTemplate -->
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <!-- 给定连接工厂, 必须是spring创建的连接工厂. -->
        <property name="connectionFactory" ref="connectionFactory"></property>
        <!-- 可选 - 默认目的地命名 -->
<!--        <property name="defaultDestinationName" value="simple_queue"></property>-->
        <!-- pubSubDomain 为true表示发布订阅模式;false表示点对点模式 -->
        <property name="pubSubDomain" value="true"/>
    </bean>

    <!--这个是队列目的地,点对点的,仅有两个构造函数一个无参一个带String-->
    <bean id="queue" class="org.apache.activemq.command.ActiveMQQueue">
        <constructor-arg value="spring.activemq.queue"/>
    </bean>
    <!--这个是主题目的地,一对多的,仅有两个构造函数一个无参一个带String -->
    <bean id="topic1" class="org.apache.activemq.command.ActiveMQTopic">
        <constructor-arg value="topic"/>
    </bean>

(2) activemq-listener.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"
       xmlns:mvc="http://www.springframework.org/schema/mvc" 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.xsd
  	http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context.xsd
	http://activemq.apache.org/schema/core
    http://activemq.apache.org/schema/core/activemq-core.xsd
    http://www.springframework.org/schema/jms
    http://www.springframework.org/schema/jms/spring-jms.xsd">

    <!-- 消息监听器 -->
    <!-- queue消费者 -->
    <bean id="listener" class="mail.controller.TestConsumer"/>
    <!-- topic消费者 -->
    <bean id="listener1" class="mail.listener.TestConsumer1"/>
    <bean id="listener2" class="mail.listener.TestConsumer2"/>

    <!-- Queue监听器 -->
    <jms:listener-container destination-type="queue"
                            container-type="default" connection-factory="connectionFactory"
                            acknowledge="auto">
        <jms:listener destination="queue" ref="listener" />
    </jms:listener-container>

    <!-- Topic监听器 -->
    <jms:listener-container destination-type="topic"
                            container-type="default" connection-factory="connectionFactory"
                            acknowledge="auto">
        <jms:listener destination="topic" ref="listener1" />
        <jms:listener destination="topic" ref="listener2" />
    </jms:listener-container>

3、生产证代码

public class TestPorducer {

    @Autowired
    private JmsTemplate jmsTemplate;

    @RequestMapping("sendmsg.do")
    public String send(@RequestParam("msg") final String  message) {
        System.out.println("发送消息---->"+message);
        jmsTemplate.send(new MessageCreator() {
            @Override
            public Message createMessage(Session session) throws JMSException {
                return session.createTextMessage(message);
            }
        });
        return "ok";
    }

    /**
     * 动态的目的地
     * @param destinationName
     * @param message
     * @return
     */
    @RequestMapping("sendmsg1.do")
    public String send1(String destinationName,@RequestParam("msg") final String  message) {
        System.out.println("发送消息---->"+message+";目的地---->"+destinationName);
        jmsTemplate.send(destinationName,new MessageCreator() {
            @Override
            public Message createMessage(Session session) throws JMSException {
                return session.createTextMessage(message);
            }
        });
        return "ok";
    }
}

4、消费者代码

public class TestConsumer1 implements MessageListener {
    @Override
    public void onMessage(Message message) {
        // myQueueB的消费者
        try {
            String text = ((TextMessage) message).getText();
            System.out.println(this.getClass().getSimpleName() + "发布订阅1----接受到消息---->" + text);

        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值