spring - 如何在客户端找到Eureka注册服务的IP
问题描述
我有以下服务:
- EurekaServer - 托管 eureka 发现服务器
- 客户端服务 - 注册到 EurekaServer
- Finder-service - 注册到 EurekaServer
有没有办法获取客户端服务的 ip,以便我可以从 Finder 服务向它发出请求。
我知道有一种方法可以从 EurekaServer 找到 InstanceInfo,我正在考虑在 eureka 服务器中创建一个控制器,您可以在其中传递服务 ID 并获取服务的实例 IP。这样,Finder-service 只需要知道它知道的服务 id 和 eureka ip,因为它在那里注册。
还有比这更干净的解决方案吗?
解决方案
要使用客户端发现,您首先需要通过添加@EnableEurekaClient
或添加@EnableDiscoveryClient
到您的@SpringBootApplication
注释类(或您的专业@Configuration
)来启用。
接下来要使用实际服务实例的解析,您需要创建一个RestTemplate
负载均衡的。这将添加一个拦截器,它将服务名称转换为 IP 地址/DNS 名称以将请求发送到(如果找到多个实例,它将在这些实例之间分配负载)。
要创建负载平衡RestTemplate
,请将@LoadBalanced
注释添加到已配置的RestTemplate
.
@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder rtb) {
return rtb.build();
}
现在,当通过它发出请求时,RestTemplate
它会将服务名称解析为client-service
要使用的实际服务实例。无需您做任何事情。
推荐阅读
- html - HTML5 日期组件在 iOS 14 上无法与 Cordova 一起使用的问题
- javascript - 问题示例 phoneNumber
- android-studio - Android Studio - 构建库 aar 文件不会将风味或 buildType 附加到输出
- java - Checkstyle 升级后如何验证自定义配置 xml
- flutter - 当文本字段集中在颤动时如何避免键盘
- android - Webview 无法在 html url 中加载 pdf
- reactjs - Typescript React:如何覆盖默认的 html 输入元素属性道具类型
- android - 需要单击两次才能更新文本视图中的文本
- javascript - 切换布尔值反应
- python - Jupyter Notebook 中的 PySpark:“列”对象不可调用