ActiveMQ+spring整合

这里自己在   192.168.159.136 这台服务器上面启动了一个Activemq

项目中都已经引用了spring的相关pom

activemq和spring进行整合配置需要下面的三个jar包:

<!-- activemq和spring进行集成需要下面三个jar包  -->
<dependency>
  <groupId>org.apache.activemq</groupId>
  <artifactId>activemq-all</artifactId>
  <version>5.15.3</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jms</artifactId>
  <version>${spring.version}</version>
</dependency>
<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-pool2</artifactId>
  <version>2.4.2</version>
</dependency>
所以在  配置的 pom.xml文件当中加入下面三个文件

配置下面这样的一个spring配置文件

service-jms.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:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://code.alibabatech.com/schema/dubbo
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd" default-autowire="byName">

    <!--  配置activemq的连接工厂  -->
    <bean id="connectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
        <property name="connectionFactory">
            <bean class="org.apache.activemq.ActiveMQConnectionFactory">
                <property name="brokerURL">
                    <value>tcp://192.168.159.136:61616</value>
                </property>
            </bean>
        </property>
        <property name="maxConnections" value="50"/>
    </bean>

    <!--  发送的目的地  -->
    <bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">
        <constructor-arg index="0" value="spring-queue"/>
    </bean>

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

    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="connectionFactory"/><!-- 连接工厂 -->
        <property name="defaultDestination" ref="destination"/><!--  目的地  -->
        <property name="messageConverter">   <!--  消息转换 -->
            <bean class="org.springframework.jms.support.converter.SimpleMessageConverter"/>
        </property>
    </bean>
    <!--
    <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="connectionFactory"/>
        <property name="destination" ref="destinationTopic"/>
        <property name="messageListener" ref="messageListener"/>
    </bean>

    <bean id="messageListener" class="com.gupao.vip.mic.dubbo.jms.FirstMessageListener"/>
    -->

</beans>

编写一段代码测试  activemq的发送消息。

 public static void main(String[]args){
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("classpath:META-INF/spring/service-jms.xml");
        JmsTemplate template = (JmsTemplate) ac.getBean("jmsTemplate");

        template.send(new MessageCreator() {
            public Message createMessage(Session session) throws JMSException {
                TextMessage message = session.createTextMessage();
                message.setText("Hello,mic");
                return message;
            }
        });
        System.out.println("消息已经发送");
    }

运行代码,显示消息已发送。

在另外一个项目中同样也是导入上面的三个maven的jar包,编写一个和上面的 service-jms.xml文件一样的spring配置文件

编写一个消息接收的类:

public class SpringJmsReceiver {

    public static void main(String[] args) {
        ClassPathXmlApplicationContext context=
                new ClassPathXmlApplicationContext(
                        "classpath:META-INF/spring/service-jms.xml");
         /*上面这种是使用 Listener的方式进行消息的接收操作,下面的方式是使用 普通的方式进行MessageListener的接收操作.
        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }
        */
        JmsTemplate jmsTemplate=(JmsTemplate) context.getBean("jmsTemplate");

        String msg=(String)jmsTemplate.receiveAndConvert();

        System.out.println(msg);
    }
}

运行主函数,显示到sender那一边发送过来的消息。

项目源代码地址

https://github.com/q907364606/activemq_and_spring



topic的方式发送接收

如果我们想要用 topic的方式进行activemq的消息交互,我们应该这么做:

在两边的  service-jms.xml文件当中配置  

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

两边都加上这样的配置,然后再   jmsTemplate 这个bean为 id的标签中更改defaultDestination这个属性。

然后再进行消息的发送和接收的测试。


在实际的开发当中,我们不可能一直以阻塞的方式接收消息,需要使用非阻塞的方式进行接收。

在消息接收端定义一个Listener如下:

public class SpringJmsListener implements MessageListener{

    @Override
    public void onMessage(Message message) {
        try {
            System.out.println(((TextMessage)message).getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}

然后再在其项目的 spring-jms.xml文件当中配置一个bean进行依赖注入:

   <bean id="messageListener" class="com.gupao.vip.mic.dubbo.jms.SpringJmsListener"/>

运行SpringJMSReceriver,不使用 jmsTemplate进行消息的接收,使用MessageListener的方式,这样然后sender那端一直发送消息,可以一直监听到消息。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值