Производители и потребители Apache Camel - PullRequest
28 голосов
/ 22 января 2010

Мне трудно обдумать концепцию.

Я пытаюсь реализовать конечную точку, которая прослушивает tcp-порт для входящих сообщений в проприетарном формате, который затем преобразовал бы сообщение и позволил бы верблюду переадресовать и направить.

Правильно ли я понял, что производитель отвечает за отправку сообщений в Endpoint, а Consumer получает их от этой конечной точки?

При изучении интерфейсов я не мог понять поток сообщений между этими объектами, особенно на стороне потребителя. Consumer определяет только методы start() и stop() ...

При настройке теста для реализации скелета Camel вызвал createProducer() в конечной точке и process() в объекте-производителе. После этого он вернулся, ничего не делая с потребителем или связанным с ним процессором.

Может ли кто-нибудь указать мне правильное направление?

Ответы [ 3 ]

45 голосов
/ 31 октября 2013

Важно помнить, что Endpoint, созданный Component (то есть фабрикой конечных точек), может находиться на или конце верблюда Route. Если вы поместите Component в начало маршрута, тогда должна быть реализация Consumer части Component . Это делает работу по преобразованию конкретного ввода / запроса (например, HTTP-запроса) во что-то общее - верблюда Exchange - который может путешествовать по маршруту . Принимая во внимание, что если вы поставите Component в конце route , то у вас должна быть реализация Producer. Producer выполняет работу по извлечению Exchange из конца маршрута и преобразованию его в нечто конкретное (например, сообщение JMS).

Мне кажется, что документация по Fuse ESB лучше (в целом), чем веб-сайт Apache Camel . Со страницы Fuse ESB Component :

Конечные точки потребителя принимают запросы. Они всегда появляются в начале маршрута, и они инкапсулируют код, отвечающий за получение входящие запросы и рассылка исходящих ответов.

Конечные точки производителя выдают запросы. Они всегда появляются в конце маршрут, и они инкапсулируют код, ответственный за отправку исходящие запросы и получение входящих ответов.


enter image description here

18 голосов
/ 23 января 2010

Я наконец понял это, посмотрев на компонент Stream.

Оказалось, что я допустил ошибку, думая о конечной точке как о чем-то центральном, через что все должно пройти.

ПростоеОтвет заключается в том, что потребитель получает данные из внешней системы (в моем случае прослушивает сокет сервера), а производитель отправляет данные во внешнюю систему.

Поскольку моя конечная точка доступна только для чтения (она не будет использоватьсякак конечный пункт процесса маршрутизации Camel), мне действительно не нужен производитель (он должен выдавать исключение RuntimeException, если система все еще пытается это сделать из-за неправильной конфигурации).Подходящим примером будет конечная точка атома верблюда - вы можете читать каналы, но (по состоянию на 1.6.0) вы не можете их опубликовать.

Аналогично, вам нужен только производитель для конечной точки только для записи, которая неполучать данные из внешней системы (например, протоколирование).

6 голосов
/ 22 января 2010

Производитель расширяет Процессор, что означает, что он также имеет метод процесса.

Ознакомьтесь с бесплатной главой 1 в книге «Верблюд в действии», в которой немного рассказывается об этих концепциях «Верблюд». http://www.manning.com/ibsen/

И этот учебник также превосходен, поскольку он вводит эти концепции в устойчивом темпе http://camel.apache.org/tutorial-example-reportincident.html

...