Expresión de enrutamiento de Spring Cloud Stream Kafka
Tengo una aplicación de Spring Cloud Stream que utiliza un enfoque funcional. La aplicación usa una expresión de enrutamiento para filtrar los mensajes a la función del consumidor que inspecciona la carga útil.
spring:
cloud:
function:
routing-expression: “payload[‘type’] == ‘Event’ ? ‘handleEvent’ : ‘commitIgnoredEvent'”
definition: functionRouter;handleDlqMessage
Esta configuración arroja la excepción:
org.springframework.messaging.MessageHandlingException: error occurred
in message handler [org.springframework.cloud.stream.
function.FunctionConfiguration$FunctionToDestinationBinder$1@3aff91a]; nested exception is
org.springframework.expression.spel.SpelEvaluationException:
EL1027E: Indexing into type ‘org.apache.avro.generic.GenericData$Record’
is not supported, failedMessage=GenericMessage
Sin embargo, esta configuración que utiliza el encabezado no arrojará una excepción:
spring:
cloud:
function:
routing-expression: “header[‘type’] == ‘Event’ ? ‘handleEvent’ : ‘commitIgnoredEvent'”
definition: functionRouter;handleDlqMessage
El sistema de producción no utiliza encabezados, por lo que no puedo usar la segunda opción. ¿La expresión de enrutamiento funciona solo con encabezados? ¿Falta alguna configuración que permita la inspección de la carga útil?
davy.ai
Sí, la expresión de enrutamiento funciona solo con encabezados. Puede usar la propiedad spring.cloud.stream.bindings.input.consumer.headerMode para habilitar la inspección de los datos de carga útil. El valor de esta propiedad debe establecerse en raw. Esto permitirá que se inspeccione la carga útil y se aplique la expresión de enrutamiento.