restcontrolleradvice responseentityexceptionhandler handling example error custom controlleradvice advice exception-handling error-handling routing spring-integration

exception-handling - responseentityexceptionhandler - spring boot custom error response



IntegraciĆ³n de Spring: escritura en una cola de errores cuando se produjo Exception en un componente Service Activator (1)

Agregue un atributo de canal de error al componente de entrada que inicia el flujo

error-channel="myErrorChannel"

cuando un componente en sentido ascendente (como el servicio invocado por el activador del servicio) lanza una excepción, el componente entrante colocará un mensaje de error en el canal de error. La carga de ese mensaje es una excepción de mensajería que tiene dos propiedades:

failedMessage cause

Entonces, en su flujo de error, agregue un transformador ...

<int:transformer input-channel="myErrorChannel" output-channel="toJmsChannel" expression="payload.failedMessage"

seguido de su adaptador de canal de salida jms.

Estoy comenzando a usar la integración de Spring y no sé cómo resolver esta situación si es posible.

Me gustaría ''capturar'' automáticamente cada Excepción que pueda suceder en los activadores del servicio de mi aplicación y enviar estos errores a una cola dedicada. Gateway no es una solución porque necesito un código personalizado, así que tengo que usar elementos activadores de servicio si he entendido correctamente el principio.

Pensé que algo así estaría bien:

<jms:outbound-channel-adapter channel="errorChannel" connection-factory="jmsConnectionFactory" destination="oneErrorQueue"/>

Eso no está funcionando. No sé si errorChannel es utilizado por Spring Integration para poner los errores en efecto.

gracias, parece que funciona

He puesto el transformador a escuchar el canal de error del componente de entrada que comienza el flujo y recibe la excepción de messaging cuando ocurre un error en el activador del servicio. Ahora el problema es que este error no llega a mi cola. Te dejo ver el código:

<jms:message-driven-channel-adapter channel="input-channel" concurrent-consumers="1" max-concurrent-consumers="3" connection-factory="jmsConnectionFactory" transaction-manager="jtaTransactionManager" destination="myQueue" error-channel="myErrorChannel"/> <transformer input-channel="myErrorChannel" output-channel="create-error-channel" ref="errorTransporter" method="transform"/> <jms:outbound-channel-adapter channel="create-error-channel" connection-factory="jmsConnectionFactory" destination="creationErrorQueue" extract-payload="true"/> ...

Y el transformador:

public class ErrorTransporter { @Transformer public Message<CreateCustomerOrder> transform(MessagingException exception) { return (Message<CreateCustomerOrder>) exception.getFailedMessage(); } }

¡Gracias con antelación por ayudar!