spring整合activemq

整合spring和activemq需要搞清楚如下的东东

1、ConnectionFactory分:

     a、spring管理连接到activemq服务器的管理ConnectionFactory也即是所谓产生到jms服务器的链接

      b、真正产生到JMS服务器链接的ConnectionFactory还得是由JMS服务厂商提供,并且需要把它注入到Spring提  供的ConnectionFactory中

2、生产者  生产者负责产生消息并发送到JMS服务器,这通常对应的是我们的一个业务逻辑服务实现类,通常是 利用Spring为我们提供的JmsTemplate类来实现的

3、消费者 消息的接受者;一般包括[size=14px;]处理消息的[/size]MessageListener、消息监听容器MessageListenerContainer、发送消息到指定目的地Destination之类

4、消息类型:点对点、发布订阅

具体详情可以参考该地址:http://haohaoxuexi.iteye.com/blog/1893038

想实现代码如下:

一、业务服务接口


[code="java"]package com.jms.service;

import javax.jms.Destination;

public interface ProducerService {
public void sendMessage(Destination destination, final String message);
}

二、业务服务接口实现类



[code="java"]package com.jms.service;

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 void sendMessage(Destination destination, final String message) {
        System.out.println("---------------生产者发送消息-----------------");
        System.out.println("---------------生产者发了一个消息:" + message);
        jmsTemplate.send(destination, new MessageCreator() {
            public Message createMessage(Session session) throws JMSException {
                return session.createTextMessage(message);
            }
        });
    }

    public JmsTemplate getJmsTemplate() {
        return jmsTemplate;
    }

    @Resource
    public void setJmsTemplate(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }

}

三、消息处理接口

[code="java"]package com.jms.service;


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

public class ConsumerMessageListener implements MessageListener {

    public void onMessage(Message message) {
        //这里我们知道生产者发送的就是一个纯文本消息,所以这里可以直接进行强制转换
        TextMessage textMsg = (TextMessage) message;
        System.out.println("接收到一个纯文本消息。");
        try {
            System.out.println("消息内容是:" + textMsg.getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }

}
四、测试单元



[code="java"]package com.jms.service;

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;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/jms-messages.xml")
public class ProducerConsumerTest {
    @Autowired
    private ProducerService producerService;
    @Autowired
    @Qualifier("queueDestination")
    private Destination destination;
   
    @Test
    public void testSend() {
        for (int i=0; i
queue

六、需要下载activemq服务器并配置好,最终开启activemq服务器 http://activemq.apache.org/activemq-5111-release.html (如若未开启activemq服务可能会到导致只出现一对 消息发送 接收)

七、对应的项目jar详见附件,任意建一个web项目即可

如上基本实现spring 整合 jms (activemq)

相关推荐