Конвертировать из 1 формата сообщения в другой формат - PullRequest
0 голосов
/ 18 ноября 2011

Вот мое требование.

У меня есть клиент, который отправлял определенный формат сообщений некоторому поставщику услуг программного обеспечения (ABC), используя какой-либо сетевой протокол.

Теперь этот клиент переключаетсяпоставщик услуг программного обеспечения (XYZ), но не хочет менять свое программное обеспечение и хочет продолжить отправку того же сообщения поставщика ABC.

  • Провайдер ABC использует своего рода формат сообщений на основе позиционирования через некоторый архаичный сетевой протокол
  • Провайдер XYZ использует веб-сервис XML через HTTP (s), а не SOA, просто простой POST с XML
  • Некоторые значения могут быть напрямую отображены, в то время как другие должны быть пересчитаны или изменены.Например, преобразование номера счета клиента из провайдера ABC в номер счета провайдера XYZ.это для запроса и ответа.
  • Сетевой архаичный протокол будет преобразован в TCPI / IP на сетевом уровне, так что это не проблема.
  • Клиент ожидает ответа в режиме реального времени.То есть: клиент делает запрос, XYZ делает то, что когда-либо и отвечает обратно клиенту.

Поэтому мне нужно создать какой-то туннель, который принимает TCP / IP, преобразует сообщение в XML, отправляет его HTTP (s)) POST в XYZ, возврат XML-ответа, преобразование обратно в позиционный, ответ клиенту через TCPI / IP.

Является ли это типом ESB, если я просто напишу какое-то приложение JAVA-сервера, которое будетсделать это?

Ответы [ 4 ]

0 голосов
/ 07 марта 2013
<flow name="FileTransferFlow1" doc:name="FileTransferFlow1">
    <file:inbound-endpoint path="C:\mule_projects\filetransfer\in" responseTimeout="10000" doc:name="IncomingFile"/>
    <http:outbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" doc:name="HTTP" responseTransformer-refs="Java"/>
     <custom-transformer class="com.Transformer" doc:name="Java"/>
    <file:outbound-endpoint path="C:\mule_projects\filetransfer\out" responseTimeout="10000" doc:name="OutgoingFile"/>
</flow>

0 голосов
/ 18 ноября 2011

Если вам нужно пойти с ESB, вы можете попробовать WSO2 ESB [1], есть различные образцы [2], которые вы можете попробовать из коробки. WSO2 ESB поддерживает различные типы преобразований сообщений, коммутацию протоколов и многое другое.

[1] http://wso2.org/library/esb [2] http://wso2.org/project/esb/java/4.0.0/docs/samples_index.html

0 голосов
/ 02 декабря 2011

Пробовал Mule ESB это очень легкий вес. Я бы сказал даже больше, чем некоторые из его конкурентов. Мне нравится, как это не особенно связано с SOA или мылом. Таким образом, вы можете создать любую конечную точку от простого TCP / IP, HTTP, File до Email, чтобы все, на самом деле оно имело более дюжины соединителей, и вы даже можете написать свой собственный. Мне также нравится тот факт, что сообщение может быть чем угодно. Я могу ошибаться, но даже когда другие утверждают, что имеют различные соединители и форматы сообщений, им кажется, что SOAP где-то спрятан под капотом, и это кажется странным, некоторые другие кажутся хорошими, но имеют плохие документы. Не понравилось то, что некоторые базовые функции JDBC доступны только в корпоративной версии. I.e: Чтобы получить параметры вывода из сохраненного вызова процедуры, вам нужна версия для предприятий.

На самом деле я мог выбрать любой серверный API, который позволял бы мне создать сервер для получения HTTP, затем написать свой код для преобразования сообщения, открыть клиентское соединение для следующей службы, отправить его, получить ответ, повторно преобразовать его обратно и вернуть клиенту. Все это при одновременной проверке правильности работы потоков и очередей на сервере. Возможно, я мог бы просто использовать причал и сервлет и сделать все за один запрос. Это вариант, но если мне нужно переключиться на TCP / IP, я просто немного изменяю конфигурацию. Ожидание, чтобы увидеть, что говорит клиент.

ESB - это в основном клей и сантехника. Все, что мне нужно было сделать, это написать три пользовательских класса-преобразователя, поскольку сообщения, с которыми я имею дело, являются проприетарными банковскими форматами и не точно соответствуют простым преобразованиям XSLT / XML ... И около 20 тегов XML, чтобы собрать все вместе ...

Это все, что мне нужно для извлечения этого из Mule (не включая теги для создания моего источника данных и SQL-запроса) ...

<flow name="myFlow">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" />
    <object-to-string-transformer />
    <custom-transformer class="com.mycom.transformer.MyTransformer" />
    <enricher target="#[variable:client]">
        <jdbc:outbound-endpoint queryKey="getClientConfig" exchange-pattern="request-response" />
    </enricher>
    <custom-transformer class="com.MyCom.transformer.MyOtherTransformer" />
    <http:outbound-endpoint exchange-pattern="request-response" host="xxx.xxx.xxx.xxx" port="80" path="some path" method="POST"/>
    <custom-transformer class="com.MyCom.transformer.BackToOtherFormat" />
</flow>

Так что в основном ... 1 - получить HTTP (ы) с пользовательским сообщением 2- Разобрать сообщение, чтобы получить номер клиента 3- Поиск номера клиента в базе данных, чтобы получить номер клиента для другой службы ... 4- Создать новое сообщение 5- Отправьте в другой сервис 6- Преобразовать ответ обратно 7- Возврат к клиенту

0 голосов
/ 18 ноября 2011

У вас слишком много вариантов.Начиная с Python, Perl .. есть библиотеки / модули, обеспечивающие поддержку TCP / HTTP / telnet / ....Используя это, вы можете сделать это.

ESB может быть излишним для этого, это большая структура для больших интеграций, но да, вы можете написать свои BC (связующие компоненты) и сделать это.Производительность Я не уверен, что ESB будет так же хорош, как что-то более примитивное, например .pl / .py

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

Например, вы сказали "Некоторые значения могут быть напрямую сопоставлены, а другие должны быть пересчитаны или изменены. Например, преобразование учетной записи клиентаномер от провайдера ABC до номера счета провайдера XYZ. это для запроса и ответа. ", если сопоставление ABC-A / c-num в XYZ-A / c-num доступно только через удаленный вызов EJB, тогда выВозможно, вы захотите написать все это в J2EE.Если вам для «расчетов» нужны какие-то конкретные библиотеки, вы должны учесть это тоже ...

Надеюсь, это не усугубит вашу проблему ..:)

PS: Вы должны начатьпринимая ответы на ваши предыдущие вопросы.как сказал Хоум.

...