项目结构
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服务