本文是基于spring和rabbitmq的,部分资料来自网上,如有问题,请联系作者
1、配置文件
1.1 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0
</modelVersion>
<groupId>com.sdnware
</groupId>
<artifactId>start04
</artifactId>
<version>0.0.1-SNAPSHOT
</version>
<packaging>jar
</packaging>
<name>start04
</name>
<url>http://maven.apache.org
</url>
<properties>
<project.build.sourceEncoding>UTF-8
</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>commons-io
</groupId>
<artifactId>commons-io
</artifactId>
<version>2.4
</version>
</dependency>
<dependency>
<groupId>org.ehcache
</groupId>
<artifactId>ehcache
</artifactId>
<version>3.3.1
</version>
</dependency>
<dependency>
<groupId>org.springframework
</groupId>
<artifactId>spring-context
</artifactId>
<version>4.3.6.RELEASE
</version>
</dependency>
<dependency>
<groupId>org.springframework
</groupId>
<artifactId>spring-jms
</artifactId>
<version>4.3.6.RELEASE
</version>
</dependency>
<dependency>
<groupId>org.apache.activemq
</groupId>
<artifactId>activemq-spring
</artifactId>
<version>5.14.5
</version>
</dependency>
<dependency>
<groupId>com.rabbitmq
</groupId>
<artifactId>amqp-client
</artifactId>
<version>4.1.0
</version>
</dependency>
<dependency>
<groupId>org.springframework.amqp
</groupId>
<artifactId>spring-rabbit
</artifactId>
<version>1.7.2.RELEASE
</version>
</dependency>
<dependency>
<groupId>org.slf4j
</groupId>
<artifactId>slf4j-log4j12
</artifactId>
<version>1.7.2
</version>
</dependency>
<dependency>
<groupId>junit
</groupId>
<artifactId>junit
</artifactId>
<version>3.8.1
</version>
<scope>test
</scope>
</dependency>
</dependencies>
</project>
1.2 spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:rabbit="http://www.springframework.org/schema/rabbit"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring-rabbit.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd ">
<rabbit:connection-factory id="connectionFactory"
host="192.168.100.205" username="admin" password="sdnware"
port="5672" virtual-host="/" />
<rabbit:admin connection-factory="connectionFactory"/>
<rabbit:template exchange="test-mq-exchange" id="amqpTemplate" connection-factory="connectionFactory" message-converter="jsonMessageConverter" />
<bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" />
<rabbit:queue id="test_queue" name="test_queue" durable="true" auto-delete="false" exclusive="false"/>
<rabbit:direct-exchange name="test-mq-exchange" durable="true" auto-delete="false" id="test-mq-exchange">
<rabbit:bindings>
<rabbit:binding queue="test_queue" key="test_queue_key"/>
</rabbit:bindings>
</rabbit:direct-exchange>
</beans>
2、生产者
package com.sdnware.start04.rabbitmq.spring;
public interface MQProducer {
/**
* 发送消息到指定队列
* @param queueKey
* @param object
*/
public void sendDataToQueue(String queueKey, Object object);
}
package com.sdnware.start04.rabbitmq.spring;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
public class MQProducerImpl implements MQProducer {
private static Logger LOG = LoggerFactory.getLogger(MQProducerImpl.class);
private AmqpTemplate amqpTemplate;
public MQProducerImpl(AmqpTemplate amqpTemplate) {
this.amqpTemplate = amqpTemplate;
}
@Override
public void sendDataToQueue(String queueKey, Object object) {
try {
amqpTemplate.convertAndSend(queueKey, object);
}
catch (Exception e) {
LOG.error(
"ERROR", e);
}
}
}
3、消费者
3.1 使用Listenter 的方式请自行放开spring配置文件中说明部分 3.2 使用java
package com.sdnware.start04.rabbitmq.spring;
public interface MQConsumer {
/**
*
* desc:接收消息
* author:chen.bob
* time:2017年5月5日 下午2:41:41
* @param queueKey
* @param object
*/
void recvDataToQueue(String queueKey);
}
package com.sdnware.start04.rabbitmq.spring;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
public class MQConsumerImpl implements MQConsumer {
private static Logger LOG = LoggerFactory.getLogger(MQConsumerImpl.class);
private AmqpTemplate amqpTemplate;
public MQConsumerImpl(AmqpTemplate amqpTemplate) {
super();
this.amqpTemplate = amqpTemplate;
}
@Override
public void recvDataToQueue(String queueName) {
try {
Object receiveAndConvert = amqpTemplate.receiveAndConvert(queueName);
LOG.info(
"接收到消息:"+receiveAndConvert);
}
catch (Exception e) {
LOG.error(
"ERROR", e);
}
}
}
4、测试
package
com.sdnware.start04
.rabbitmq.spring
import java
.util.HashMap
import java
.util.Map
import java
.util.concurrent.TimeUnit
import org
.springframework.amqp.core.AmqpTemplate
import org
.springframework.context.ApplicationContext
import org
.springframework.context.support.ClassPathXmlApplicationContext
public class Run {
private static ApplicationContext classPathXmlApplicationContext
private static String key =
"test_queue_key"
static{
classPathXmlApplicationContext = new ClassPathXmlApplicationContext(
"spring-rabbitmq.xml")
}
public static void main(String[] args) throws Exception {
AmqpTemplate amqpTemplate = classPathXmlApplicationContext
.getBean(
"amqpTemplate",AmqpTemplate
.class)
MQProducer mqProducer = new MQProducerImpl(amqpTemplate)
Map<String,String> message = new HashMap<String,String>()
message
.put(
"title",
"this is a message")
mqProducer
.sendDataToQueue(key, message)
//以下部分,使用Listenter方式请自行注释
TimeUnit
.SECONDS.sleep(
5)
MQConsumer mqConsumer = new MQConsumerImpl(amqpTemplate)
mqConsumer
.recvDataToQueue(
"test_queue")
}
}
5、资料
RabbitMQ Exchange类型详解 http://www.cnblogs.com/julyluo/p/6265775.html