Производители и потребители Apache Camel
У меня есть трудности, обволакивающие мою концепцию.
Я пытаюсь реализовать конечную точку, которая прослушивает порт tcp для входящих сообщений в проприетарном формате, который затем преобразует сообщение и верблюд берет на себя переадресацию и маршрутизацию.
Правильно ли я понял, что производитель отвечает за отправку сообщений в Endpoint
, а Consumer
получает их от этой конечной точки?
При изучении интерфейсов я не мог понять поток сообщений между этими объектами, особенно на потребительской части. Consumer
определяет только методы start()
и stop()
...
При настройке теста на реализацию скелета Camel
вызывается createProducer()
в конечной точке и process()
для объекта-производителя. После этого он вернулся, без каких-либо действий с потребителем или связанным с ним процессором.
Может ли кто-нибудь указать мне в правильном направлении?
Ответы
Ответ 1
Я, наконец, понял это, посмотрев на компонент Stream.
Оказывается, я допустил ошибку, думая о конечной точке как о чем-то центральном, через что все должно идти.
Простым ответом является то, что потребитель получает данные от внешней системы (слушая в ящике сервера в моем случае), и производитель отправляет данные во внешнюю систему.
Поскольку моя конечная точка доступна только для чтения (она не будет использоваться в качестве конечного пункта назначения процесса маршрутизации Camel), мне действительно не нужен производитель (он должен вызывать исключение RuntimeException, если система все еще пытается это сделать из-за неправильной конфигурации). Примером может служить конечная точка верблюда-атома - вы можете читать каналы, но (начиная с версии 1.6.0) вы не можете опубликовать ее.
Аналогично, вам нужен только производитель для конечной точки только для записи, которая не получает данные из внешней системы (например, протоколирование).
Ответ 2
Важно помнить, что Endpoint
, созданный Component
(т.е. конечная точка Factory), может сидеть на обоих концах Camel Route
. Если вы поместите компонент в начало маршрута, тогда должна быть реализация части Consumer
компонента. Это делает работу по преобразованию конкретного ввода/запроса (например, HTTP-запроса) во что-то общее - Camel Exchange
-, который может перемещаться по Маршруту. Если вы поместите компонент в конец маршрута, то вы должны иметь реализацию Producer
. Продюсер выполняет работу по переносу Exchange с конца маршрута и превращает его в нечто конкретное (например, сообщение JMS).
Я считаю, что документация Fuse ESB лучше (в общем), чем веб-сайт Apache Camel. На странице Предохранитель ESB:
Конечные точки потребителей потребляют запросы. Они всегда появляются в начале маршрута, и они инкапсулируют код, ответственный за получение входящих запросов и отправки исходящих ответов.
Конечные точки производителя создают запросы. Они всегда появляются в конце маршрут и они инкапсулируют код, ответственный за диспетчеризацию исходящих запросов и получения входящих ответов.
![enter image description here]()
Ответ 3
A Производитель расширяет процессор, что означает, что он также имеет метод обработки.
Ознакомьтесь с бесплатной главой 1 в книге "Верблюд в действии", в которой рассказывается немного о тех концепциях Верблюда.
http://www.manning.com/ibsen/
И этот учебник также превосходный, поскольку он вводит эти концепции в устойчивый темп
http://camel.apache.org/tutorial-example-reportincident.html