Deug 2016-12-20 02:21 采纳率: 11.1%
浏览 1700
已结题

spring和rabbitmq整合,会概率性的出现取不到数据的情况

向队列里放入数据的语句: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>
  • 写回答

3条回答 默认 最新

  • Deug 2016-12-20 02:19
    关注

    跪求大神解答一下~~是什么原因导致的

    评论

报告相同问题?

悬赏问题

  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试