配置一个activemq 的xml文件?

首先写一个发布者acticemq-sender.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: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.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

        <!-- 这是注解扫描 -->
        <context:annotation-config></context:annotation-config>

        <!-- 这是配置连接activemq的连接工厂 -->
        <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</value>
                    </property>
                </bean>
            </property>
            <property name="maxConnections" value="100"></property>
        </bean>

        <!--使用缓存可以提升效率 -->
        <bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
            <property name="targetConnectionFactory" ref="jmsFactory" />
            <property name="sessionCacheSize" value="1" />
        </bean>

        <!-- 创建一个jmsTemplate 对象-->
        <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
            <property name="connectionFactory" ref="cachingConnectionFactory" />
            <property name="messageConverter">
                <bean class="org.springframework.jms.support.converter.SimpleMessageConverter" />
            </property>
        </bean>

        <!-- 这是对activemq 的队列(queue)配置bean-->
        <bean id="destinationQueue" class="org.apache.activemq.command.ActiveMQQueue">
            <constructor-arg name="name" value="HELLOQUEUE" />
        </bean>

        <!--Topic主题配置bean -->
        <bean id="destinationTopic" class="org.apache.activemq.command.ActiveMQTopic">
            <constructor-arg index="0" value="spring-topic" />
        </bean>

        <!-- 这是将你的发布者所对应的类生成一个bean -->
        <!--(com.easyit.activemq.ActiveMQService)这个是你发布者对应的类-->
        <bean id="activeMqService" class="com.easyit.activemq.ActiveMQService"></bean>
</beans>

下面是发布者对应的java类

package com.easyit.activemq;

import javax.jms.Destination;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jms.core.JmsTemplate;

import com.easyit.tools.CodeTools;

public class ActiveMQService {

    //这里就是将对象交给bean进行管理(注入)
    @Autowired
    JmsTemplate jmsTemplate;

    @Autowired
    //这里是使用queue(队列)
    @Qualifier("destinationQueue")
    Destination destination;

    public void send(String message) {

        //这里是将数据通过测试类进行输入
        jmsTemplate.send(destination,(session)->{
            return session.createTextMessage(message);
        });

        //这个是你发布消息的标题
        String name = "名称";
        jmsTemplate.send(name, (session)->{
            //发布的内容
            return session.createTextMessage("内容");
        });
    }

}

下面是消费者active-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: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.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">


        <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</value>
                    </property>
                </bean>
            </property>
            <property name="maxConnections" value="100"></property>
        </bean>

        <!--使用缓存可以提升效率-->
        <bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
            <property name="targetConnectionFactory" ref="jmsFactory"/>
            <property name="sessionCacheSize" value="1"/>
        </bean>

        <!--测试Queue,队列的名字是spring-queue-->
        <bean id="destinationQueue" class="org.apache.activemq.command.ActiveMQQueue">
            <constructor-arg index="0" value="HELLOQUEUE"/>
        </bean>

        <!--测试Topic-->
        <bean id="destinationTopic" class="org.apache.activemq.command.ActiveMQTopic">
            <constructor-arg index="0" value="spring-topic"/>
        </bean>

        <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
            <property name="connectionFactory" ref="cachingConnectionFactory"/>
            <property name="destination" ref="destinationQueue"/>
            <property name="messageListener" ref="messageListener"/>
        </bean>

        <!--消息监听器所对应的类-->
        <bean id="messageListener" class="com.easyit.activemq.ActiveMQListener"></bean>
</beans>

消费者对应的类

package com.easyit.activemq;

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

import org.apache.log4j.Logger;

//这里一定要实现MessageListener(函数式接口)
//函数式接口就是接口里面只有一个方法
public class ActiveMQListener implements MessageListener{

    private final static Logger log = Logger.getLogger(ActiveMQListener.class);

    public ActiveMQListener() {}

    @Override
    public void onMessage(Message message) {
        try {
            log.debug("接收消息为:"+((TextMessage)message).getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }

}

这上面的类记得不需要运行,接下来就是能运行的测试类

发布者测试类

package com.easyit.testactivemq;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.easyit.activemq.ActiveMQService;

public class TestActiveMQService {

    public static void main(String[] args) {
        //加载配置xml文件
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("activemq-sender.xml");

        //这里是从配置的xml里面拿到对应的bean
        ActiveMQService activeMQService = (ActiveMQService) context.getBean("activeMqService");

        //循环发送消息
        for(int i=0;i<10100;i++) {
            activeMQService.send("hello world:"+i);
        }
    }
}

消费测试类

package com.easyit.testactivemq;

import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestActiveMQListener {

    @Test
    public void testActiveMQListener() {
        //得到xml文件,然后启动,等待发布者发布消息,有消息就消费
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("activemq-listener.xml");

        context.start();

    }
}

记得 要运行activemq的服务器
运行就可以看到效果了
还可以通过浏览器访问127.0.0.1:8161/admin
然后输入账号admin,密码admin进行查看

猜你喜欢

转载自blog.csdn.net/qq_43052309/article/details/82260947