您的位置:首页 > 编程语言 > Java开发

干货分享微服务spring-cloud(8.服务治理和配置中心spring-cloud-zk)

2018-02-13 15:49 746 查看

8.1. 服务治理

Spring-cloud-zookeeper提供的模式包括服务发现和配置,配置动态更新不需要手动请求/refresh端点。该项目通过自动配置并绑定到Spring环境和其他Spring编程模型成语,为Spring Boot应用程序提供Zookeeper集成。通过几个简单的注释,您可以快速启用和配置应用程序中的常见模式,并使用基于Zookeeper的组件构建大型分布式系统。Feign,Turbine,Ribbon和Zuul均与Spring Cloud Zookeeper合作。
创建工程demo-springcloud-zookeeper,添加主要依赖spring-cloud-starter-zookeeper-config
启用服务治理功能,添加主要依赖spring-cloud-starter-zookeeper-discovery启用配置中心功能。顺带说一下添加依赖org.springframework.boot:spring-boot-configuration-processor是为了
启用Type-safe Configuration Properties



新建启动类ZookeeperApplication,@EnableDiscoveryClient启用服务注册和发现,@EnableFeignClients启用feignClients,注意@FeignClient("demo-springcloud-zookeeper")这里的name要与spring.application.name相同,也即服务名。
@Configuration
@SpringBootApplication
@EnableDiscoveryClient
@RestController
@EnableFeignClients
public class ZookeeperApplication {

@Value("${spring.application.name}")
private String appName;

@Autowired
private LoadBalancerClient loadBalancer;

@Autowired
private DiscoveryClient discovery;

@Autowired
private Environment env;

@Autowired
private AppClient appClient;

@Autowired
private OwnerProperties ownerProperties;

@RequestMapping("/")
public ServiceInstance lb() {
return this.loadBalancer.choose(this.appName);
}

@RequestMapping("/hi")
public String hi() {
return "Hello World! from " + this.discovery.getLocalServiceInstance();
}

@RequestMapping("/self")
public String self() {
return this.appClient.hi();
}

@RequestMapping("/getFromEnv")
public String getFromEnv(@RequestParam("prop") String prop) {
return new RelaxedPropertyResolver(this.env).getProperty(prop, "Not Found");
}

@RequestMapping("/getFromArchaius")
public String getFromArchaius(@RequestParam("prop") String prop){
return DynamicPropertyFactory.getInstance().getStringProperty(prop,"null").get();
}

@RequestMapping("/getFromConfigProperties")
public String getFromConfigProperties(){
return ownerProperties.getFirstName();
}

@FeignClient("demo-springcloud-zookeeper")
interface AppClient {
@RequestMapping(path = "/hi", method = RequestMethod.GET)
String hi();
}

@Autowired
RestTemplate rest;

public String rt() {
return this.rest.getForObject("http://" + this.appName + "/hi", String.class);
}

public static void main(String[] args) {
SpringApplication.run(ZookeeperApplication.class, args);
}

@Bean
@LoadBalanced
RestTemplate loadBalancedRestTemplate() {
return new RestTemplate();
}
}

配置文件application.properties配置spring.cloud.zookeeper.discovery.register开启注册服务,spring.cloud.zookeeper.config.enabled开启配置服务,spring.cloud.zookeeper.connectString
配置连接zk地址



启动zookeeper,启动应用,服务注册成功后位于zookeeper的services节点,get该节点查看数据验证是否成功注册服务



浏览器访问http://localhost:8080/self接口,通过feign客户端appClient访问绑定的自己提供的rest接口服务/hi



8.2. 配置中心

Zookeeper提供了一个分层命名空间,允许客户端存储任意数据,如配置数据。Spring Cloud Zookeeper Config是Config Server和Client的替代方案。在特殊的“引导”阶段,配置被加载到Spring环境中。默认情况下,配置存储在/config命名空间中。根据应用程序的名称和模拟解析属性的Spring Cloud Config顺序的活动配置文件,创建多个PropertySource实例。例如,名为“testApp”的应用程序和“dev”配置文件将创建以下属性源:
config/testApp,dev
config/testApp
config/application,dev
config/application

Properties是config/application命名空间适用于使用zookeeper进行配置的所有应用程序。config/testApp命名空间中的Properties仅适用于名为“testApp”的服务实例。
创建zk节点/config并配置子节点/test并设置值为“点融借款”和子节点person.first-name (person.firstName, person.first_name, PERSON_FIRST_NAME也可以)并设置值为“点融理财”



浏览器访问http://localhost:8080/getFromEnv?prop=test



浏览器访问http://localhost:8080/getFromConfigProperties

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息