Spring整合RabbitMQ带测试用例Demo完整代码

项目结构

jar包

 <!--rabbitmq-->
        <dependency>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit</artifactId>
            <version>1.4.5.RELEASE</version>
        </dependency>

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:rabbit="http://www.springframework.org/schema/rabbit"
       xmlns:context="http://www.springframework.org/schema/context"
       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-4.0.xsd
    http://www.springframework.org/schema/rabbit
    http://www.springframework.org/schema/rabbit/spring-rabbit.xsd" >

    <!--配置文件所在位置-->
    <context:property-placeholder location="classpath*:rabbitmq.properties" ignore-unresolvable="true"/>
    <!--实体类所在的包-->
    <context:component-scan base-package="com.xdja.cssp.demo.service.rabbit"/>
    <!--连接配置-->
    <rabbit:connection-factory id="connectionFactory" username="${rabbitmq.username}" password="${rabbitmq.password}"
                               host="${rabbitmq.host}"
                               port="${rabbitmq.port}"
                               virtual-host="/"/>
    <rabbit:admin connection-factory="connectionFactory"/>
    <!--spring template 声明-->
    <rabbit:template exchange="test-mq-exchange" id="rabbitTemplate"  connection-factory="connectionFactory"  message-converter="jsonMessageConverter" />
    <!--消息对象json转换类-->
    <bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter"/>

    <!--声明一个消息队列-->
    <rabbit:queue id="test_queue_key" />
    <!--交换机定义-->
    <rabbit:direct-exchange name="test-mq-exchange" id="test-mq-exchange">
        <rabbit:bindings>
            <rabbit:binding queue="test_queue_key" key="test_queue_key"/>
        </rabbit:bindings>
    </rabbit:direct-exchange>
    <bean id="queueListenter" class="com.xdja.cssp.demo.service.rabbit.QueueListener"/>

    <rabbit:listener-container connection-factory="connectionFactory">
        <rabbit:listener queues="test_queue_key" ref="queueListenter"/>
    </rabbit:listener-container>
</beans>

实体类

package com.xdja.cssp.demo.service.rabbit;

/**
 * @author: ggp
 * @Date: 2018/11/12 17:18
 * @Description:
 */
public interface MQProducer {
    /**
     * 发消息到指定队列
     * @param queueKey
     * @param object
     */
     void sendDataQueue(String queueKey, Object object);
}
package com.xdja.cssp.demo.service.rabbit;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author: ggp
 * @Date: 2018/11/12 17:20
 * @Description:
 */
@Service
public class MQProducerImpl implements MQProducer {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    private final static Logger LOGGER = LoggerFactory.getLogger(MQProducerImpl.class);
    @Override
    public void sendDataQueue(String queueKey, Object object) {

        try{
            LOGGER.info("==============发送消息开始==============消息"+object.toString());
            rabbitTemplate.convertAndSend(queueKey, object);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
package com.xdja.cssp.demo.service.rabbit;

import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
import org.springframework.stereotype.Component;

/**
 * @author: ggp
 * @Date: 2018/11/12 17:27
 * @Description:
 */
@Component
public class QueueListener implements MessageListener {
    @Override
    public void onMessage(Message message) {
        String str = "";
        try{
            str = new String(message.getBody(), "UTF-8");

            System.out.println("=============监听【QueueListenter】消息"+message);

            System.out.print("=====获取消息"+str);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

测试用例

package com.xdja.cssp.demo.test;


import com.xdja.cssp.demo.service.rabbit.MQProducer;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.HashMap;
import java.util.Map;

/**
 * @author: ggp
 * @Date: 2018/11/12 17:29
 * @Description:
 */
@RunWith(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:/META-INF/spring/applicationContext-rabbitmq.xml")
public class RabbitMQTest {
    @Autowired
    MQProducer mqProducer;

    private final String queue_key = "test_queue_key";

    @Test
    public void send (){
        Map<String,Object> msg = new HashMap<>();
        msg.put("data","hello, rabbitMq");
        mqProducer.sendDataQueue(queue_key,msg);
    }

}

注意事项:需要配置erlong环境(rabbitmq是用erlong语言开发的),需要开启rabbitmq服务

猜你喜欢

转载自blog.csdn.net/qq_33543634/article/details/84066424