2016-03-22 2 views
0

Я создал пользовательский процессорный модуль, который может генерировать исключение.Управление исключительным исключительным процессором с помощью шины Rabbitmq

Но когда возникает исключение, я не вижу стек в файле logs или 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(); 
} 

У вас есть идея, что это не так?

Спасибо заранее,

Simon

ответ

0

Проблема состоит в том, что пустая строка не отправляется в следующий поток.

0

Какая версия XD вы используете? Я просто проверял с 1.3.1 выпуска и увидеть исключение ОК в журнале контейнера ...

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. Однако шахта вышла под WARN.

+0

Спасибо за ваш ответ. Я использую версию 1.3.0. Я попробую с последним. –

+0

Я пробовал с последней версией (1.3.1), но это не сработало. Я также изменил уровень журнала (WARN to DEBUG), но я не вижу stacktrace. –

+0

Тогда мне нужно увидеть остальную часть вашего кода. –

0

Это мой пример кода:

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 

Я также добавил этот line в файле xd-container-logback.groovy:

logger("com.mypackage.xdmodule", DEBUG, ["STDOUT", "FILE", "AMQP"], true) 
Смежные вопросы