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
原文地址:http://blog.51cto.com/11290909/2071526