Полезный ответ PetSerAl - ваш единственный вариант в Windows PowerShell , начиная с версии 5.1.
PowerShell Core v6.1 + теперь предлагает собственное решение PowerShell с помощью расширения для оператора -replace
, что устраняет необходимость вызова [regex]::Replace()
:
$text -replace "-(\d*)-", { param($match)
"This is the image: $(Get-Base64 $match.Groups[1].Value)"
}
Веб-сервисы действительно позволяют слабо связанную архитектуру. С RMI необходимо удостовериться, что определения классов остаются в синхронизации во всех экземплярах приложения, что означает, что всегда необходимо развертывать всех их одновременно, даже если только один из них изменяется (не обязательно, но это требуется довольно часто из-за последовательных UUID и этажерки)
, Также это не очень масштабируемо, который мог бы быть проблемой, если Вы хотите иметь подсистемы балансировки нагрузки.
В моем уме RMI работает лучше всего на меньшие, локальные приложения, которые не связаны с Интернетом, но все еще должны быть разъединены. Я использовал его для имения JAVA-приложения, которое обрабатывает электронные средства связи, и я был довольно удовлетворен результатами. Для других приложений, которые требуют более сложного развертывания и работы через Интернет, я скорее использую веб-сервисы.
Мой опыт с RMI и веб-сервисами зеркально отражает Ваши предположения выше. В целом производительность RMI далеко превышает веб-сервисы, но интерфейсная спецификация явно указана для веб-сервисов.
Примечание, которого ни один из этих протоколов не требует , что приложения с обеих сторон являются Java. Я был бы склонен использовать веб-сервисы, когда у меня было один или несколько внешних партнеров, которые реализовывали интерфейс, но RMI, если я управлял обоими концами соединения.
Используете ли Вы веб-сервисы, или более "собственный" подход зависит от среды также. Если необходимо пройти через прокси или некоторый корпоративный брандмауэр (брандмауэры), веб-сервисы, более вероятно, будут работать, так как они полагаются на HTTP только. RMI требует, чтобы Вы открыли другой порт для своего приложения, которое может быть трудным (не технически, хотя) в некоторых средах...
, Если Вы знаете, что этой проблемой не является проблема, необходимо рассмотреть использование RMI. SOA не зависит от технологии так как на хорошем сервисном дизайне. Если у Вас есть контейнер EJB, Вы можете бобы сеанса вызовов через RMI и дополнительно представлять их как веб-сервисы, если Вы действительно должны, между прочим.
производительность зависит от данных, которыми Вы планируете обмениваться. Если Вы хотите отправить сети сложного объекта от одного приложения до другого, это, вероятно, быстрее с RMI, так как это (обычно) передается в двоичном формате. Если бы у Вас есть некоторое ТЕКСТОВОЕ / СОДЕРЖАНИЕ XML так или иначе, веб-сервисы могут быть эквивалентными или еще быстрее, с тех пор Вы не должны были бы преобразовывать ничего вообще (для коммуникации).
HTH,
Martin
RMI может быть лучшим направлением, если необходимо поддержать сложное состояние.
Что относительно Дистанционной работы Spring. Это комбинирует подобный REST протокол HTTP с двоичным форматом RMI. Работы отлично для меня.
Для Spring Remoting (я догадался, что вы имеете в виду HTTP Invoker), обе стороны должны использовать Spring, если это так, то это можно обсудить.
Для Java для Java-приложения RMI является хорошим решением,