Spring Cloud获取本地服务实例方法getLocalServiceInstance()过时
在使用discoveryClient.getLocalServiceInstance()
时,发现该方法已经过时。源码提示使用org.springframework.cloud.client.serviceregistry.Registration
,该类可以根据服务名,获取注册了该服务名的所有实例。具体使用如下的testBalance()
和serviceInstance()
方法。
import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.serviceregistry.Registration;
import org.springframework.cloud.netflix.eureka.EurekaDiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AController {
private final Logger logger = Logger.getLogger(getClass());
@Autowired
private Registration registration; // 服务注册
@Autowired
private DiscoveryClient client; // 服务发现客户端
@Value("${server.port}")
private int port;
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String test(@RequestParam String param) {
ServiceInstance instance = client.getLocalServiceInstance();
logger.info("/test, host:" + instance.getHost() + ", service_id:" + instance.getServiceId() + ", result:" + param);
return "From Service-A, Param is " + param;
}
@RequestMapping(value = "/testBalance", method = RequestMethod.GET)
public String testBalance(@RequestParam String param) {
ServiceInstance instance = serviceInstance();
String result = "/testBalance, host:port=" + instance.getUri() + ", "
+ "service_id:" + instance.getServiceId();
logger.info(result);
return "From Service-A , " + result;
}
public ServiceInstance serviceInstance() {
List<ServiceInstance> list = client.getInstances(registration.getServiceId());
if (list != null && list.size() > 0) {
for (ServiceInstance instance : list) {
if (instance.getPort() == port)
return instance;
}
}
return null;
}
}
可以看到注入了Registration
和DiscoveryClient
两个对象:
(1)Registration
服务注册接口,包含了获取服务 ID 的方法。
(2)DiscoveryClient
服务发现客户端,具有以下方法:
String description();
获取描述ServiceInstance getLocalServiceInstance(); @Deprecated
获取本地服务实例,方法被删除,推荐不要使用List getInstances(String serviceId);
通过服务 ID,获取当前服务的服务实例List getServices();
获取所有服务 ID 列表
版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/25/spring-cloud-gets-local-service-instance-method-getlocalserviceinstance-outdated/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论