2017-10-06 42 views
0

我已經使用REST模板多次調用REST API。 但我想知道,有沒有一種方法可以區分本地和網絡通話。Spring引導休息模板,區分本地和網絡調用

例如:如果REST URI解析爲相同應用程序的API調用,那麼可以調用控制器/服務方法。 但是,如果它不可用,則可以進行網絡通話。

P.S.我知道,我們可以通過創建一個使用彈簧緩存來列出當前應用程序的所有服務。 但我想知道Spring REST模板或其他框架是否提供了此功能。

回答

0

RestTemplate不支持你想要實現的OOTB。

但是,它聽起來像你想要實現某種RPC機制。

比方說,你有serviceInterface等的服務接口,ServiceStubImpl作爲服務的本地存根(客戶端)和ServiceImpl具體的地方實施。

在那些你撥打電話向ServiceImpl身處何地,你使用serviceInterface等顯然這實際上可能是實現自身或ServiceStubImpl這使得遠程調用。後者可以採用RestTemplate內部的其他各種您所選擇的傳輸機制。

你的特殊使用案例似乎是,你不知道,如果ServiceImpl是本地或者不可用,但如果是這樣,你要調用,而不是直接進行網絡往返。

所有的類似非常給它試圖在類路徑中某些類和,如果他們提供執行必要的初始化和佈線春天啓動的自動配置機制。

這就是說,將春天啓動的機制,爲您的使用情況應該是這樣的一個例子:

@Configuration 
class SeviceConfig { 

    @Bean 
    @ConditionalOnMissingClass(name = "your.app.ServiceImpl") 
    ServiceInterface service() { 
    return new ServiceStubImpl(...); 
    } 

} 

你可以閱讀更多關於春季啓動在這裏創建自己的自動配置:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html

+0

感謝您的回覆,這可以做到。但是我正在尋找一種能夠在內部完成這種事情的工具。 –

+0

正如我在問題中提到的那樣,使用spring緩存我們可以做這種事情 –