向队列里放入数据的语句:this.amqpTemplate.convertAndSend("queue_one_key", xml);
从队列里取数据的类:@Service(value="MessFromMq")
public class MessFromMq implements MessageListener {@Override
public void onMessage(Message arg0) {String message = "";//取出的报文
try {
message = new String(arg0.getBody(), "UTF-8");
}catch (UnsupportedEncodingException e) {
this.log.info(e.getMessage(), e);
return;
}}}
其中arg0是从队列里取出的数据
spring-mq的配置文件:
<?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:context="http://www.springframework.org/schema/context"
xmlns:rabbit="http://www.springframework.org/schema/rabbit" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring-rabbit-1.2.xsd">
<!-- 连接服务配置 -->
<rabbit:connection-factory id="connectionFactory" host="192.168.15.60" username="lyq" password="kiban410." port="5672"/>
<!-- <rabbit:connection-factory id="connectionFactory" host="192.168.56.172" username="mq" password="mq" port="5672"/> -->
<rabbit:admin connection-factory="connectionFactory"/>
<!-- queue 队列声明-->
<rabbit:queue id="xsdxx" durable="true" auto-delete="false" exclusive="false" name="xsdxx"/>
<!-- exchange queue binging key 绑定 -->
<rabbit:direct-exchange name="my-mq-exchange" durable="true" auto-delete="false" id="my-mq-exchange">
<rabbit:bindings>
<rabbit:binding queue="xsdxx" key="queue_one_key"/>
</rabbit:bindings>
</rabbit:direct-exchange>
<!-- spring amqp默认的是jackson 的一个插件,目的将生产者生产的数据转换为json存入消息队列,由于fastjson的速度快于jackson,这里替换为fastjson的一个实现 -->
<bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.JsonMessageConverter"/>
<!-- spring template声明-->
<rabbit:template exchange="my-mq-exchange" id="amqpTemplate" connection-factory="connectionFactory" message-converter="jsonMessageConverter"/>
<!-- queue litener 观察监听模式 当有消息到达时会通知监听在对应的队列上的监听对象-->
<rabbit:listener-container concurrency="1" connection-factory="connectionFactory" message-converter="jsonMessageConverter">
<rabbit:listener queue-names="xsdxx" ref="MessFromMq" method="onMessage"/>
</rabbit:listener-container>
</beans>