Book.od.ua Книги для вашего бизнеса



Одесская библиотека бизнес литературы
полезные книги для бизнеса

1.12. Обработка заказов. Продолжение.

Описав основные этапы передачи сообщения, сосредоточимся на функции управления складскими запасами. Как известно, компания ПРУСТ имеет две подобные системы, соответствующие приборам и устройствам. Для корректной маршрутизации запросов о наличии товара на складе применим маршрутизатор на основе содержимого, как показано на рис. 1.15. В зависимости от первой буквы в коде товара (''П'' или ''У'') маршрутизатор на основе содержимого будет передавать все входящие запросы о наличии товара в соответствующую систему управления складскими запасами.
Обработка заказов
Обратите внимание, что значение сообщения, передаваемого по каналу "точка-точка" (Point-to-Point Channel, с. 131) между маршрутизатором на основе содержимого и системой управления складскими запасами, отличается от значения сообщения, передаваемого по каналу "публикация-подписка". Система управления складскими запасами получает сообщение с командой (Command Message, с. 169), предписывающей выполнить определенное действие (в данном случае - проверить наличие товара на складе).
Поскольку системы управления складскими запасами приборов и устройств используют различные внутренние форматы данных, преобразуем сообщение канонического формата в формат конкретной системы с помощью трансляторов сообщений (Message Translator, с. 115).
Предположим, что первая буква в коде товара отлична от букв ''П'' и ''У''. В этом случае маршрутизатор на основе содержимого направит сообщение в канал недопустимых сообщений (InvalidMessage Channel, с. 143) INVALID_ORDER_ITEM. Следует подчеркнуть, что значение сообщения зависит от канала, который используется для его транспортировки. Так, одно и то же сообщение, передаваемое по каналам NEW_ORDER и INVALID_ORDER_ ITEM, имеет два разных значения: заказ, предназначенный для выполнения, и заказ, содержащий ошибку.
До сих пор мы предполагали, что все заказы содержат один элемент. Это может создать неудобства для клиентов, так как им придется размещать отдельный заказ для каждого товара. К тому же обработка нескольких заказов, сделанных одним и тем же клиентом, неизбежно приведет к возрастанию накладных расходов. К сожалению, включение в заказ нескольких элементов усложнит выбор системы управления складскими запасами, применяющейся для проверки наличия товара на складе. На первый взгляд, эту проблему можно решить за счет канала "публикация-подписка", транспортирующего сообщение о размещении нового заказа обеим системам. Однако как в данном случае отличить заказ, содержащий ошибку? Очевидно, что идеальное решение заключается в добавлении к логике маршрутизатора на основе содержимого возможности обработки отдельных элементов заказа.
Выход из сложившейся ситуации заключается в использовании разветвителя (Splitter, с. 274) - компонента, разделяющего сообщение на несколько меньших частей. Как показано на рис. 1.16, разветвитель разделяет сообщение о размещении нового заказа на несколько сообщений о заказе товара, которые передаются соответствующей системе управления складскими запасами с помощью маршрутизатора на основе содержимого.
Обработка заказов
Проверив наличие товаров на складе, сообщения о заказе товара необходимо объединить в одно сообщение. Для этого применим агрегатор - компонент, объединяющий несколько входящих сообщений в одно исходящее сообщение. Использование развет-вителя и агрегатора позволяет отделить обработку отдельных элементов заказа от обработки заказа как одного целого.
При создании агрегатора необходимо ответить на три ключевых вопроса.
• Какие сообщения о заказе товара принадлежат к одному заказу? (Условие корреляции?)
• Как определить, были ли получены все сообщения, принадлежащие к одному заказу? (Условие полноты?)
• Как объединить несколько сообщений о заказе товара в одно сообщение о размещении нового заказа? (Алгоритм агрегации?)
Поскольку клиент может разместить несколько последовательных заказов, судить о принадлежности сообщений к одному заказу по идентификатору клиента нельзя. А это значит, что нам необходимо ввести идентификатор самого заказа. Для этого добавим к процессу создания сообщения о размещении нового заказа расширитель содержимого (ContentEnricher, с. 348), как показано на рис. 1.17.
Расширитель содержимого - это компонент, добавляющий недостающие элементы данных к входящему сообщению. В данном случае расширитель содержимого используется для добавления уникального идентификатора к сообщению о размещении нового заказа.
Обработка заказов
 Определим условие полноты сообщения и алгоритм агрегации. Поскольку агрегатор принимает все сообщения о заказе товара, включая заказы с ошибкой, условием полноты сообщения о размещении нового заказа может стать получение агрегатором определенного (заранее известного) числа сообщений о заказе товара с одинаковым идентификационным номером. Алгоритм агрегации заключается в простой конкатенации сообщений о заказе товара в одно сообщение о размещении нового заказа. Полученное сообщение размещается агрегатором в канале VALIDATED_ORDER.
Поскольку комбинация разветвителя, маршрутизатора на основе содержимого и агрега-тора является неотъемлемой частью множества интеграционных решений, она заслужила статус отдельного компонента - так называемого обработчика составного сообщения (Composed Message Processor, с. 307). На рис. 1.18 показана обновленная диаграмма процесса обработки заказа, которая включает в себя символ обработчика составного сообщения.


Обработка заказов


Понравился материал? Поделитесь с друзьями!

<< Предыдущая статьяСледующая статья >>
1.11. Обработка заказов 1.13. Проверка состояния заказа





Убедительная просьба при использовании любых материалов Одесской электронной бизнес-библиотеки ставить активную ссылку на наш сайт. По всем вопросам касательно сайта пожалуйста пишите на почту
      Карта сайта