Пробовал 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- Возврат к клиенту