我使用REST模板多次调用REST API。 但我想知道,有没有办法区分本地和网络电话。
例如:如果REST URI解析为同一应用程序的API调用,则可以调用控制器/服务方法。 但如果它不可用,则可以进行网络呼叫。
P.S。我知道,我们可以通过创建一个使用弹簧缓存来列出当前应用程序的所有服务来实现这一点。 但我想知道Spring REST模板或任何其他框架是否提供了开箱即用的功能。
答案 0 :(得分:0)
RestTemplate 不支持您想要实现的目标OOTB。
然而,听起来你想要实现某种RPC机制。
假设你有 ServiceInterface 作为服务接口, ServiceStubImpl 作为服务的本地存根(客户端)和 ServiceImpl 具体本地实施。
在那些你正在调用 ServiceImpl 的地方,显然你使用 ServiceInterface 实际上可能是实现本身,或 ServiceStubImpl 远程呼叫。后者可以在您选择的其他种类的传输机制内部使用 RestTemplate 。
您的特殊用例似乎是您不知道 ServiceImpl 是否在本地可用,但如果是,您希望直接调用它而不是进行网络往返。
所有这些都非常类似于Spring Boot的自动配置机制,它在类路径上寻找某些类,并在它们可用时执行必要的初始化和连线。
那就是说,为你的用例应用Spring Boot的机制就像这样:
LEFT JOIN
您可以在此处阅读有关使用Spring Boot创建自己的自动配置的更多信息:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html