2015-04-21 27 views
10

Muszę ujawnić niektóre usługi do zdalnego używania przez klientów Java (będą używać httpinvoker) i innych języków (będą używać usługi REST).Czy można zdalnie odsłonić komponent bean podczas wiosennego rozruchu przy użyciu usług REST i httpInvoker

Czy mogę skonfigurować rozruch sprężynowy, aby odsłonić oba? (Nie miałbym nic przeciwko, gdyby były użyte dwie osobne instancje z różnymi portami, np. W this post).

Rzuciłam ideę zapewniając API dla klientów Java, które wewnętrznie używa REST, ponieważ jest to dość uciążliwe drut wszystkich punktów końcowych REST do kodu ręcznie za pomocą RestTemplate. Lubię koncepcję HttpInvoker ponieważ ProxyFactoryBean przyzwyczaja automagicznie. Gdyby Spring Remoting byłby w stanie to zrobić w taki sposób, w jaki można to zrobić dla JMS, AMQP i innych, udawałbym się w ten sposób.

+0

Mieszacie prawdopodobnie dwa idiomy: RPC i transfer stanu. httpInvoker dotyczy zdalnych wywołań procedur. Nazywasz po prostu metodę, przekazujesz kilka argumentów i uzyskujesz wynik. W REST masz do czynienia ze zmianą określonego stanu rzeczy (jest to w zasadzie idea REST). Sądzę, że najlepszym rozwiązaniem dla takiego przypadku byłoby posiadanie dwóch różnych fasad przed twoją usługą, które będą zgodne z zasadami każdego stylu API. – mp911de

+0

Myślę, że obie techniki pozwalają na zmianę stanu. W REST jest to http GET, z httpInvoker, który wywołuje getMethod.Do modyfikacji/tworzenia wartości REST używa/ustawia połączenia PUT/POST i httpInvoker. Ale kiedy mówimy o dwóch fasadach, to jest to interesujące: jak to zrobić w elegancki sposób? – Marged

+0

@ Czy wiesz, dlaczego chcesz użyć przestarzałego narzędzia, takiego jak Spring HttpInvoker? Był już przestarzały wiosną 2.0, nie sądzę, aby Spring Boot automatycznie skonfigurował to, a nawet zarządzał zależnościami. –

Odpowiedz

2

Możesz użyć czegoś takiego. Ujawnij swoje usługi jako usługę odpoczynku. Następnie zmodyfikuj klientów java do korzystania z tych usług za pomocą http lub innej biblioteki. Jeśli inna strona również jest zainteresowana, może ją również konsumować na swój własny sposób.

W przeciwnym razie można utworzyć własny jar wykorzystujący usługi odpoczynku i pozwolić, aby klienci korzystający z tego oprogramowania korzystali z niego, bez wiedzy o usługach związanych z resztą.

+0

Tworzenie słoika, który wywołuje interfejs REST, jest podejściem, które rzuciłem. Szukam łatwego podejścia, w którym największa część zostanie utworzona automatycznie. Działa to dla httpinvoker i REST, gdy używam każdej techniki w izolacji. – Marged

0

HttpInvoker został usunięty po wiosennej integracji 2.x: http://docs.spring.io/spring-integration/docs/2.0.x/reference/html/httpinvoker.html (! Ważne nagłówek zawiera szczegóły). Jest to odniesienie do HTTP Wsparcie w wersji 3.xi 4.x: http://docs.spring.io/spring-integration/docs/latest-ga/reference/html/http.html

Istnieje również inny SO pisać z prośbą o wsparcie ktoś HTTP i bagażnika wiosny z niektórych istotnych informacji: Spring Integration Http with Spring Boot and @RequestMapping

Mam nadzieję, że ten dostaje jesteś częścią wyjścia z króliczej nory.

+1

Być może źle to interpretuję, ale tylko dlatego, że Spring _Integration_ dropuje wsparcie dla HttpInvokera, nie oznacza to, że Sprint sam go upuścił lub wycofał. Ponieważ nie używam Spring Integration, nie powinienem mieć problemów. – Marged

+0

Tak ... masz rację. http://docs.spring.io/spring/docs/current/spring-framework-reference/html/remoting.html –

1

Używamy tutaj obu technik. HttpInvoker dla wywołań Java do Java. Zwykły JSON przez HTTP dla innych klientów (podobny do REST, ale nie prawdziwy REST). Myślę, że projekt jsonrpc4j stanowi dobry sposób na implementację rzeczy HTTP.

3

Eksponowanie punktów końcowych inicjatora HTTP w Spring Boot jest tak proste, że wygląda na to, że czegoś brakuje. W @SpringBootApplicationspring-webmvc, który ma na swoim torze (na przykład za pomocą spring-boot-starter-web POM), dodano następującą definicję Bean

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

HTTP wywołujący końcowy jest odsłonięty w /my.service i nie wpływa na inne odwzorowania. Możesz dodać tyle punktów końcowych, ile chcesz; a następnie niektóre z nich @RequestMapping s dla usługi REST na górze.

Powiązane problemy