ActiveMQ整合Spring

ActiveMQ整合Spring

(1)导入整合ActiveMQ整合所需要得jar包

<properties>
        <activemq.version>5.15.9</activemq.version>
        <spring.version>5.2.2.RELEASE</spring.version>
        <hutool.version>4.3.1</hutool.version>
        <lombok.version>1.18.8</lombok.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-all</artifactId>
            <version>${activemq.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-pool</artifactId>
            <version>${activemq.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>

(2)创建配置文件application-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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--1.声明连接工厂-->
    <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://127.0.0.1:61616"/>
            </bean>
        </property>
        <!--最大连接数-->
        <property name="maxConnections" value="100"/>
    </bean>
    <!--2.声明目的地-->
    <!--
      点对点模式使用:org.apache.activemq.command.ActiveMQQueue
      主题模式使用:org.apache.activemq.command.ActiveMQTopic
    -->
    <bean id="destinationQueue" class="org.apache.activemq.command.ActiveMQQueue">
        <!--使用构造方法的参数注入队列名字-->
        <constructor-arg name="name" value="hello-queue"/>
    </bean>
    <!--3.声明操作MQ的对象jmsTemplate-->
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <!--注入连接工厂-->
        <property name="connectionFactory" ref="jmsFactory"/>
        <!--注入信息发送的默认目的地-->
        <property name="defaultDestination" ref="destinationQueue"/>
        <!--信息转换器-->
        <property name="messageConverter">
            <bean class="org.springframework.jms.support.converter.SimpleMessageConverter"/>
        </property>
    </bean>
</beans>

(3)创建生产者 TestProducer


/**
 * 生产类
 */
public class TestProducer{

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("application-activemq.xml");
        //从IOC容器里面得到jmsTemplate
        JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class);
        //jmsTemplate.setDefaultDestination(new ActiveMQQueue("queue-spring"));  //重新设置目的地,不使用默认目的地
        //发消息
        jmsTemplate.send(new MessageCreator() {
            public Message createMessage(Session session) throws JMSException {
                //创建消息
                TextMessage textMessage = session.createTextMessage("MQ-spring");
                textMessage.setStringProperty("flag","加急");
                return textMessage;
            }
        });//发送到默认
        System.out.println("生产者发送信息成功");
    }
}

(4)创建消费类

/**
 * 整合消费类
 *
 */
public class TestQueueConsumerSpring {
    public static void main(String[] args) throws JMSException {
        ApplicationContext context = new ClassPathXmlApplicationContext("application-activemq.xml");
        JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class);
        jmsTemplate.setDefaultDestination(new ActiveMQQueue("queue-spring"));  //消费新目的地的消息
        //第一种接收方式
//      TextMessage textMessage = (TextMessage) jmsTemplate.receive();
//      System.out.println("收到的信息:"+textMessage.getText());
        //第二种接收方式
        Object object = jmsTemplate.receiveAndConvert();
        System.out.println("收到的信息:"+object.toString());
    }
}

(5)测试
注意:
1.点对点模式(队列模式)
先启动生产者,后启动消费者
2.主题模式
先启动消费者,后启动生产者

配置监听器方式

(1)在application-activemq.xml中添加,一个代表一个消费者

 <!--声明一个监听器对象-->
    <bean id="mylistener" class="listener.MyListener"/>

    <!--设置一个监听容器-->
    <bean id="queueListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="jmsFactory"/>
        <property name="destination" ref="destinationQueue"/>
        <property name="messageListener" ref="mylistener"/>
    </bean>

(2)创建生产类

/**
 * 生产类
 */
public class TestProducer{

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("application-activemq.xml");
        //从IOC容器里面得到jmsTemplate
        JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class);
        //jmsTemplate.setDefaultDestination(new ActiveMQQueue("queue-spring"));  //重新设置目的地,不使用默认目的地
        //发消息
        jmsTemplate.send(new MessageCreator() {
            public Message createMessage(Session session) throws JMSException {
                //创建消息
                TextMessage textMessage = session.createTextMessage("MQ-spring");
                textMessage.setStringProperty("flag","加急");
                return textMessage;
            }
        });//发送到默认
        System.out.println("生产者发送信息成功");
    }
}

(3)监听输出类

public class MyListener implements MessageListener {
    public void onMessage(Message message) {
        if(message instanceof TextMessage){
            TextMessage textMessage = (TextMessage) message;
            try {
                System.out.println("监听器收到消息:"+textMessage.getText());
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值