es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , , ,

Answer

  1. Avatar for 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.

Comments are closed.