RabbitMQ与Spring无非也是一样的套路
创建连接, 创建交换机, 配置路由策略, 指定分销策略
rabbitmq.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd">
<!--配置connection-factory,指定连接rabbit server参数 -->
<rabbit:connection-factory id="connectionFactory" username="admin"
password="admin" host="10.13.144.24" port="5672"
virtual-host="/" />
<!--定义rabbit template用于数据的接收和发送 -->
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" exchange="message_falldisc" />
<!--通过指定下面的admin信息,当前producer中的exchange和queue会在rabbitmq服务器上自动生成 -->
<rabbit:admin connection-factory="connectionFactory" />
<!--定义queue -->
<rabbit:queue name="saveMessage" durable="true" auto-delete="false" exclusive="false" />
<rabbit:queue name="deleteMessage" durable="true" auto-delete="false" exclusive="false" />
<!-- 定义direct exchange,绑定queueMessage -->
<rabbit:direct-exchange name="message_falldisc" durable="true" auto-delete="false">
<rabbit:bindings>
<rabbit:binding queue="saveMessage" key="save"></rabbit:binding>
<rabbit:binding queue="deleteMessage" key="delete"></rabbit:binding>
</rabbit:bindings>
</rabbit:direct-exchange>
<!-- 消息接收者 -->
<bean id="saveMessageReceiver" class="com.yuchen.rabbitmq.MessageSave"></bean>
<bean id="deleteMessageReceiver" class="com.yuchen.rabbitmq.MessageDelete"></bean>
<!-- queue litener 观察 监听模式 当有消息到达时会通知监听在对应的队列上的监听对象-->
<rabbit:listener-container connection-factory="connectionFactory">
<rabbit:listener queues="saveMessage" ref="saveMessageReceiver"/>
<rabbit:listener queues="deleteMessage" ref="deleteMessageReceiver"/>
</rabbit:listener-container>
</beans>
向applicationContext.xml 添加
<import resource="classpath*:rabbitmq.xml" />
生产者:
package com.yuchen.rabbitmq;
import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.stereotype.Service;
/**
* 功能概要:消息产生,提交到队列中去
*
* @author lsy
* @since 2017年 1月 6日
*/
@Service("messageProducer")
public class MessageProducer {
private Logger logger = LoggerFactory.getLogger(MessageProducer.class);
@Resource
AmqpTemplate amqpTemplate;
public void sendMessage(String routingKey ,Object object) {
logger.info("to send message:{}", object);
try {
amqpTemplate.convertAndSend(routingKey, object);
} catch (Exception e) {
e.printStackTrace();
}
}
}
消费者(保存操作):
package com.yuchen.rabbitmq;
import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
import org.springframework.beans.factory.annotation.Autowired;
public class MessageSave implements MessageListener {
private Logger logger = LoggerFactory.getLogger(MessageSave.class);
@Override
public void onMessage(Message message) {
logger.info("receive message:{}",message);
try {
ByteArrayInputStream bis = new ByteArrayInputStream(message.getBody());
ObjectInputStream ois = new ObjectInputStream(bis);
Object object = (Object)ois.readObject();
// 保存信息
ois.close();
bis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
消费者(删除操作)
package com.yuchen.rabbitmq;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
import org.springframework.beans.factory.annotation.Autowired;
public class MessageDelete implements MessageListener {
private Logger logger = LoggerFactory.getLogger(MessageDelete.class);
@Override
public void onMessage(Message message) {
logger.info("receive message:{}",message);
try {
String rowkey = new String(message.getBody(), "UTF-8");
// 删除消息
if(rowkey != null) {
}
} catch (Exception e) {
e.printStackTrace();
}
}
}