使用Rabbitmq总线管理自定义处理器异常

时间:2016-03-22 10:05:43

标签: rabbitmq spring-xd

我制作了一个可以抛出异常的自定义处理器模块。

但是当发生异常时,我无法在日志文件或标准输出中看到堆栈跟踪。

这是我的示例代码:

@Transformer(inputChannel = "input", outputChannel = "output")
public String transform(final String payload) {
    if (StringUtils.isEmpty(payload)) {
        throw new MessageConversionException("payload is empty");
    }

    logger.warn("log|warn: {}", payload);

    logger.debug("log|debug: {}", payload);

    return payload.toUpperCase();
}

你知道出了什么问题吗?

提前致谢,

西蒙

3 个答案:

答案 0 :(得分:0)

您使用的是哪个版本的XD?我刚刚使用1.3.1版本进行测试,并在容器日志中看到异常ok ...

2016-03-22T08:55:27-0400 1.3.1.RELEASE WARN xdbus.foo.0-1 retry.RejectAndDontRequeueRecoverer - Retries exhausted for message (Body:'2016-03-22
...
Caused by: org.springframework.amqp.support.converter.MessageConversionException: foo
...

我建议您启用DEBUG日志记录。然而,Mine在WARN下出现了。

答案 1 :(得分:0)

这是我的示例代码:

CustomProcessor.class

package com.mypackage.xdmodule;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.config.EnableIntegration;
import org.springframework.messaging.MessageChannel;

@Configuration
@EnableIntegration
public class ModuleConfiguration {

  @Autowired
  private CustomProcessor processor;

  @Bean
  public MessageChannel input() {
    return new DirectChannel();
  }

  @Bean
  public MessageChannel output() {
    return new DirectChannel();
  }

}

ModuleConfiguration.class

stream create --definition "http | transform --expression=payload.toUpperCase() | custom-processor | transform --expression=1/0 | log" --name custom-stream --deploy

我的信息流

logger("com.mypackage.xdmodule", DEBUG, ["STDOUT", "FILE", "AMQP"], true)

我还在xd-container-logback.groovy文件中添加了这一行:

Highcharts.setOptions({
                lang: {
                    thousandsSep: ','
                }
            });

答案 2 :(得分:0)

问题是因为空字符串未发送到下一个流。