messaging - español - camel patterns
Apache Camel productores y consumidores. (3)
Tengo dificultades para envolver mi cabeza en torno al concepto.
Estoy tratando de implementar un punto final que escucha en un puerto TCP los mensajes entrantes en un formato propietario, que luego transformaría el mensaje y haría que el camello tomara el reenvío y enrutamiento.
¿Comprendí correctamente que el Productor es responsable de enviar mensajes al Endpoint
y que el Consumer
recibe desde ese punto final?
Al estudiar las interfaces no pude entender el flujo de mensajes entre esos objetos, especialmente en la parte del consumidor. Consumer
solo define los métodos start()
y stop()
...
Al configurar una prueba en una implementación de esqueleto, Camel
invocó a createProducer()
en el punto final y process()
en el objeto productor. Después de eso, regresó, sin hacer nada con el consumidor o el procesador asociado.
¿Podría alguien apuntarme en la dirección correcta?
Es importante recordar que un Endpoint
, creado por un Component
(es decir, punto final de fábrica), puede ubicarse en cualquier extremo de una Route
camellos. Si coloca el Componente al comienzo de una ruta, debe haber una implementación de la parte de Consumer
del Componente . Esto hace el trabajo de convertir la entrada / solicitud específica (como una solicitud HTTP) en algo genérico, un Camel Exchange
, que puede viajar por una Ruta . Mientras que si coloca el Componente al final de una ruta , debe tener una implementación de un Producer
. El productor realiza el trabajo de tomar el intercambio desde el final de una ruta y convertirlo en algo específico (como un mensaje JMS).
Considero que la documentación de Fuse ESB es mejor (en general) que el sitio web de Apache Camel . Desde la página del componente Fuse ESB :
Los puntos finales del consumidor consumen peticiones. Siempre aparecen al comienzo de una ruta y encapsulan el código responsable de recibir las solicitudes entrantes y enviar las respuestas salientes.
Los puntos finales del productor producen solicitudes. Siempre aparecen al final de una ruta y encapsulan el código responsable de enviar solicitudes salientes y recibir respuestas entrantes.
Finalmente lo descubrí mirando el componente Stream.
Resulta que cometí el error de pensar en el punto final como algo central a través del cual todo debe ir.
La respuesta simple es que el consumidor recibe datos de un sistema externo (escucha en un socket del servidor en mi caso) y el productor envía datos al sistema externo.
Como mi punto final es de solo lectura (no se utilizará como destino final del proceso de enrutamiento Camel), realmente no necesito un productor (debería lanzar una excepción RuntimeException si el sistema aún intenta hacerlo debido a una configuración incorrecta). Un ejemplo apropiado sería el punto final de camello-átomo: puede leer feeds pero (a partir del 1.6.0) no puede publicar uno.
Del mismo modo, solo necesita un productor para un punto final de solo escritura que no reciba datos de un sistema externo (por ejemplo, registro).
Un productor extiende el procesador, lo que significa que también tiene un método de proceso.
Echa un vistazo al capítulo 1 gratuito en el libro Camel in Action, que explica un poco sobre esos conceptos de Camel. http://www.manning.com/ibsen/
Y este tutorial también es excelente, ya que presenta esos conceptos a un ritmo constante http://camel.apache.org/tutorial-example-reportincident.html