2017-10-06 122 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缓存我们可以做这种事情 –