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

使用Rabbitmq总线管理自定义处理器异常,rabbitmq,spring-xd,Rabbitmq,Spring Xd,我已经做了一个定制的处理器模块,它可以抛出异常 但当异常发生时,我在日志文件或标准输出中看不到stacktrace 这是我的示例代码: @Transformer(inputChannel = "input", outputChannel = "output") public String transform(final String payload) { if (StringUtils.isEmpty(payload)) { throw new MessageConver

我已经做了一个定制的处理器模块,它可以抛出异常

但当异常发生时,我在日志文件或标准输出中看不到stacktrace


这是我的示例代码:

@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();
}
你知道怎么了吗

提前感谢,


Simon

您使用的是哪一版本的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
...

我建议您启用调试日志记录。然而,我的出现在警告下。

这是我的示例代码:

@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();
}
CustomProcessor.class

package com.mypackage.xdmodule;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.integration.annotation.MessageEndpoint;
import org.springframework.integration.annotation.Transformer;
import org.springframework.messaging.converter.MessageConversionException;
import org.springframework.util.StringUtils;

@MessageEndpoint
public class CustomProcessor {

    private static final Logger logger = LoggerFactory.getLogger(CustomProcessor.class);

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

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

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

        return payload.toUpperCase();
    }
}
ModuleConfiguration.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();
  }

}
我的小溪

stream create --definition "http | transform --expression=payload.toUpperCase() | custom-processor | transform --expression=1/0 | log" --name custom-stream --deploy
我还在xd-container-logback.groovy文件中添加了这一行:

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

问题在于空字符串不会发送到下一个流。

谢谢您的回答。我使用1.3.0版本。我将尝试使用最新版本。我已尝试使用最新版本(1.3.1),但它不起作用。我还更改了日志级别(警告调试),但没有看到堆栈跟踪。