SpringCloud 是个很好的微服务解决方案,对比于dubbo,组件更全面,适合多种应用场景。我在这就不一一赘述了。
由于服务于一家集团公司,采用微服务架构体系搭建服务体系没有任何问题,但是对于客户端来说spring-cloud仅提供基于spring-boot的使用,无论是Ribbon还是Feign都必须在Spring-Cloud体系内使用,但是老系统无法进行spring-could化改造,所以需要一个简单的通过API实现spring-could基于zookeeper的微服务访问。
实现涉及框架
1. spring-webmvc RestTemplate
2. curator-x-discovery
3. spring-cloud-zookeeper-discovery ZookeeperInstance
代码说明
1. 创建curator客户端用来访问zookeeper
CuratorFrameworkFactory.newClient(address, new ExponentialBackoffRetry(1000, 3));
2.通过curator获取ServiceInstance
public static ServiceInstance
ServiceInstance
try {
CuratorFramework client = getCuratorClient();
client.start();
ServiceDiscover serviceDiscover = new ServiceDiscover(client, "services");
serviceDiscover.start();
ServiceProvider
instance = serviceProvider.getInstance();
return instance;
} catch (Exception e) {
e.printStackTrace();
}
return instance;
}
补充:serviceDiscover.getServiceProvider 可以设置service获取测试,本代码采用RoundRobinStrategy
public ServiceProvider
ServiceProvider
if (provider == null) {
provider = serviceDiscovery.serviceProviderBuilder().
serviceName(serviceName).
providerStrategy(new RoundRobinStrategy
.build();
ServiceProvider
if (oldProvider != null) {
provider = oldProvider;
}else {
provider.start();
}
}
return provider;
}
3.通过获取ServiceInstance来获取具体服务的ip以及端口信息
ServiceInstance
String requestURL = "http://" + instance.getAddress() + ":" + instance.getPort() + "/" + serviceName;
此部分沿用了spring-cloud生成服务时采用的ZookeeperInstance作为payload。
非基于spring-boot和annotation的微服务熔断/服务降级的实现-基于Hystrix