Можно ли удаленно выставить бин при весенней загрузке, используя REST и httpInvoker

Мне нужно предоставить какой-то сервис для удаленного использования клиентами Java (они должны использовать httpinvoker) и другими языками (они должны использовать REST).

Могу ли я настроить весеннюю загрузку, чтобы выставить оба? (Я не против, если будут использоваться два отдельных экземпляра с разными портами, как в этом посте).

Я отказался от идеи предоставления API для клиентов Java, которые внутренне используют REST, потому что довольно утомительно связывать все конечные точки REST в код вручную, используя RestTemplate.Мне нравится концепция HttpInvoker, потому что ProxyFactoryBean привыкает автоматически. Если Spring Remoting сможет сделать это так, как это может быть сделано для JMS, AMQP и других, я бы возглавил этот путь.

6 ответов

Решение

Вы можете использовать что-то вроде этого. Выставьте свои услуги как отдых. Затем заставьте своих клиентов Java использовать эти сервисы, используя http или другую библиотеку. Если любая другая сторона также заинтересована, они могут потреблять ее по-своему.

В противном случае вы можете создать свой собственный jar-файл, использующий ваши службы отдыха, и позволить своим клиентам java использовать его, не зная об услуге отдыха.

Выставление конечных точек HTTP invoker в Spring Boot на самом деле настолько просто, что кажется, что чего-то не хватает. В @SpringBootApplication который имеет spring-webmvc на своем пути (например, используя spring-boot-starter-web POM), добавьте следующее определение компонента:

@Bean(name = "/my.service")
public HttpInvokerServiceExporter myHttpInvokerServiceExporter(MyService myServiceImpl) {
    HttpInvokerServiceExporter exporter = new HttpInvokerServiceExporter();
    exporter.setServiceInterface(MyService.class);
    exporter.setService(myServiceImpl);
    return exporter;
}

Конечная точка HTTP invoker теперь доступна по адресу /my.service и не повлияет на другие сопоставления. Вы можете добавить столько конечных точек, сколько захотите; а затем некоторые @RequestMappingS для отдыха на вершине.

Spring HTTP Invoker опасно использовать в случае, если доверие вызывающего объекта не может быть проверено. Он устарел довольно давно, и его поддержка будет удалена в Spring 6, поэтому не используйте его.

Лучше всего реализовать связь как вызов REST и обернуть его простым в использовании методом, как предполагают некоторые другие ответы, например, ответ Малина Абеварданы - /questions/23237894/mozhno-li-udalenno-vyistavit-bin-pri-vesennej-zagruzke-ispolzuya-rest-i-httpinvoker/23237908#23237908.

Использованная литература:

PS Да, я знаю, что этот вопрос очень старый, и я уверен, что OP больше не нуждается в ответе, но я пишу его с учетом всех других будущих читателей, чтобы они не использовали Spring HTTP Invoker или любой другой Возможности Spring, подобные RPC/RMI.

Взгляните на весенний отдыхающий. Он связывает интерфейсы Java с сервисами REST. Это не решает проблему "разоблачения" службы, но значительно упрощает ее использование.

https://github.com/ggeorgovassilis/spring-rest-invoker

Мы используем обе техники здесь. HttpInvoker для вызовов Java-Java. Обычный JSON поверх HTTP для других клиентов (аналогично REST, но не истинному REST). Я думаю, что проект jsonrpc4j предоставляет хороший способ реализовать HTTP-материал.

HttpInvoker был удален после весенней интеграции 2.x: http://docs.spring.io/spring-integration/docs/2.0.x/reference/html/httpinvoker.html (! Важный заголовок содержит подробности). Существует ссылка на поддержку HTTP в версиях 3.x и 4.x: http://docs.spring.io/spring-integration/docs/latest-ga/reference/html/http.html

Есть также еще один пост SO, в котором кто-то спрашивает о поддержке HTTP и весенней загрузке с некоторой соответствующей информацией: Spring Integration Http с Spring Boot и @RequestMapping

Надеюсь, это поможет вам выйти из кроличьей норы.

Другие вопросы по тегам