2016-07-19 16 views
1

Ich benutze einen Executor-Kanal, da ich Threads wechseln, um die Transaktion zu diesem Zeitpunkt zu beenden. Der einzige andere Weg, dies zu tun, ist ein Poller und ich denke, der Executor-Kanal ist eine viel bessere Lösung. Das einzige Problem ist, dass ich keine Möglichkeit finde, einen Fehlerkanal für diesen Dispatcher zu definieren. Fehler werden immer im globalen errorChannel veröffentlicht.Fehlerkanal für Executor-Kanal

Hier ist meine config:

<task:executor id="routingExec" pool-size="10"/> 

<int:channel id="baseFlow.route"> 
    <int:dispatcher failover="false" task-executor="routingExec"/> 
</int:channel> 

Und ich möchte so etwas haben (wie in den Anfragenden):

<task:executor id="routingExec" pool-size="10"/> 

<int:channel id="baseFlow.route"> 
    <int:dispatcher error-channel="myErrorChannel" failover="false" task-executor="routingExec"/> 
</int:channel> 

Antwort

1

Fehler im ExecutorChannel über ErrorHandlingTaskExecutor behandelt werden:

if (!(this.executor instanceof ErrorHandlingTaskExecutor)) { 
    ErrorHandler errorHandler = new MessagePublishingErrorHandler(
      new BeanFactoryChannelResolver(this.getBeanFactory())); 
    this.executor = new ErrorHandlingTaskExecutor(this.executor, errorHandler); 
} 

Wo defaultErrorChannel ist wirklich wie IntegrationContextUtils.ERROR_CHANNEL_BEAN_NAME.

Also, Ihren eigenen Kanal für Fehler von diesen ExecutorChannel zu verwenden, Sie errorChannel Header für jede Nachricht Ihres eigenen ErrorHandlingTaskExecutor mit MessagePublishingErrorHandler und defaultErrorChannel, um Ihre Erwartungen zu schicken, oder einfach injizieren konfigurierten verwenden sollen.

Verwandte Themen