2014-12-21 2 views
9

Определение производителя и потребителя в книге Camel in Action немного запутывает для меня. Я уже прочитал два других ответа на подобный вопрос, но я все еще чувствую, что это не так.Потребительская путаница производителей верблюдов

Производитель является верблюд абстракция, которая относится к сущности, способной создания и отправки сообщения в конечную точку. Рисунок 1.10 иллюстрирует, где производитель вписывается в другие концепции Camel. Когда сообщение нужно отправить в конечную точку, производитель будет создать обмен и заполнить его данными, совместимыми с конкретной конечной точкой . Например, FileProducer будет записывать тело сообщения в файл. A JmsProducer, с другой стороны, отобразит сообщение Camel на javax.jms.Message перед отправкой его в пункт назначения JMS . Это важная функция в Camel, поскольку она скрывает сложность взаимодействия с конкретными транспортными средствами.

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

Кто на самом деле создает обмен? На какой стороне типичного канала коммуникации есть производитель и потребитель? Из вышеприведенного текста я не могу сказать, кто ответственен за это. Было бы здорово, если бы кто-то мог представить картинку (то, что из книги для меня непонятно), где именно производитель и потребитель, и объясните, как они работают простым способом. Может быть, какой-то пример также будет полезен.

Итак, возможно, было бы лучше привести пример, и кто-то мог бы рассказать мне, как это работает. Представьте, что мы хотим извлечь файлы из папки и поместить их в очередь JMS, и от там отправляют их для дальнейшей обработки, в конечном итоге сохраняя на диске.

Где именно производитель, потребитель в соответствии с моей фотографией? Я понимаю, что такое компонент и конечная точка.

+0

Я думаю, что последняя добавленная диаграмма слишком упрощена, чтобы правильно объяснить это, но подумайте об этом так: потребитель - это то, что читает ваши данные. Если указанная выше очередь является конечным пунктом назначения для ваших (обработанных) данных, то объект, помещающий данные в вашу очередь, является производителем. – omerkudat

+1

См. Http://stackoverflow.com/questions/2119128/apache-camel-producers-and-consumers –

ответ

6

Вы более или менее верны своим подозрением. Учитывая простой пример:

CamelContext camelContext = new DefaultCamelContext(); 
camelContext.addRoutes(new RouteBuilder() { 
    @Override 
    public void configure() { 
    from("file:data/inbox?noop=true") // consumer 
     .to("file:data/outbox");  // producer 
    } 
}); 
camelContext.start(); 
Thread.sleep(2000); 
camelContext.stop(); 

В этом примере мы использовали RouteBuilder создать Route, который после того, как CamelContext запускается, выполняет несколько следующим образом:

  1. Создает два FileComponent с, чтобы представлять как местах.
  2. Создает соответствующие FileEndpoint s, запрашивая прежние компоненты.
  3. Создайте FileConsumer для чтения с data/inbox.
  4. Создает GenericFileProducer, чтобы написать data/outbox.
  5. Ручной контроль до FileConsumer для запуска опроса файлов из его каталога, который инструктирует его Endpoint для создания Exchange (как правильно показано на рисунке). A GenericFileMessage связан с этим Exchange.
  6. Этот номер Exchange передан на номер FileProducer.

С этого мнения, обменять не создает Consumer. Думаю, на этом этапе книги это еще не имеет смысла. И это отражено в тексте. Однако, глядя на реализацию, как это эквивалентно, когда вы смотрите на код:

Consumer использует некоторые Processor при отправке сообщения, в данном случае представлен Consumer, который затем опрашивается Consumer для генерации Exchange, который Consumer запрашивает его Endpoint, для которого затем создается фактическое Exchange.

6

Возможно, the javadoc for Exchange class разъяснит вам право собственности. Ниже представлен фрагмент ответа на ваш вопрос о том, кто создает Exchange:

Exchange создается, когда пользователь получает запрос. Создается новое сообщение, запрос устанавливается как тело сообщения и в зависимости от другой конечной точки потребителя, а информация, связанная с протоколом, добавляется в качестве заголовков в сообщении. Затем создается Exchange, и вновь созданное сообщение устанавливается как входящее в Exchange. Поэтому Exchange начинает свою жизнь в Потребителе.

Смежные вопросы