2016-03-22 7 views
0

例外をスローするカスタムプロセッサモジュールを作成しました。Rabbitmqバスでカスタムプロセッサ例外を管理します

例外が発生すると、スタックトレースがログファイルまたはstdoutに表示されません。

これは私のサンプルコードです:

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

はあなたに何が間違っている任意のアイデアをお持ちですか?事前に

おかげで、

サイモン

答えて

0

問題は、空の文字列が次のストリームに送信されないためです。

0

XDのバージョンを使用していますか?私はちょうど私があなたがデバッグログを有効に示唆

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 
... 

... 1.3.1リリースでテストされ、コンテナログでOKの例外を参照してください。しかし、WARNの下で鉱山が出ました。

+0

あなたの答えをありがとう。私は1.3.0リリースを使用します。私は最新のものを試してみます。 –

+0

私は最新のリリース(1.3.1)で試しましたが、うまくいきません。また、ログレベル(WARNをDEBUG)に変更しましたが、スタックトレースが表示されません。 –

+0

それから、あなたのコードの残りの部分を見る必要があります。 –

0

これは私のサンプルコードです: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 

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(); 
    } 
} 

私もこれを追加しましたxd-container-logback.groovyファイルの行:

logger("com.mypackage.xdmodule", DEBUG, ["STDOUT", "FILE", "AMQP"], true) 
関連する問題