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!