zookeeper搭建注册中心

一、环境搭建

这里略,请查看其他相关文章,很简单,windows直接运行zkServer.cmd即可。

二、会员项目

pom依赖


		org.springframework.boot
		spring-boot-starter-parent
		2.0.1.RELEASE
	
	
	
		
			
				org.springframework.cloud
				spring-cloud-dependencies
				Finchley.M7
				pom
				import
			
		
	
	
		
		
			org.springframework.boot
			spring-boot-starter-web
		
		
		
			org.springframework.cloud
			spring-cloud-starter-zookeeper-discovery
		

	
	
	
		
			spring-milestones
			Spring Milestones
			https://repo.spring.io/libs-milestone
			
				false
			
		
	

application.yml文件

server:
  port: 8005
###服务别名----服务注册到注册中心名称 
spring:
  application:
    name: zk-member
  cloud:
    zookeeper:
    #集群 ,多个用逗号隔开
      connect-string: 127.0.0.1:2181

启动类,跟consul类似,增加@EnableDiscoveryClient注解

@SpringBootApplication
@EnableDiscoveryClient
public class AppMember {
	public static void main(String[] args) {
		SpringApplication.run(AppMember.class, args);
	}
}

业务层控制器

@RestController
public class MemberApiController {

	@Autowired
	private DiscoveryClient discoveryClient;
	@Value("${server.port}")
	private String serverPort;

	@RequestMapping("/getMember")
	public String getMember() {
		return "this is member zk,我是会员服务,springcloud2.0版本,学习分布式和微服务请上蚂蚁课堂!端口号:" + serverPort;
	}

	@RequestMapping("/getServiceUrl")
	public List getServiceUrl() {
		List list = discoveryClient.getInstances("zk-member");
		List services = new ArrayList<>();
		for (ServiceInstance serviceInstance : list) {
			if (serviceInstance != null) {
				services.add(serviceInstance.getUri().toString());
			}
		}
		return services;
	}

}

三、订单项目

pom文件一样,配置文件一样(端口号改改,应用名称改改)
启动类

@SpringBootApplication
@EnableDiscoveryClient
public class AppOrder {
	public static void main(String[] args) {
		SpringApplication.run(AppOrder.class, args);
	}

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

}

业务层控制器,实现订单项目调用会员项目

@RestController
public class OrderControler {

	// RestTemplate 是有SpringBoot Web组件提供 默认整合ribbon负载均衡器
	// rest方式底层是采用httpclient技术
	@Autowired
	private RestTemplate restTemplate;


	// 订单服务调用会员服务
	@RequestMapping("/getOrder")
	public String getOrder() {
		// 有两种方式,一种是采用服务别名方式调用,另一种是直接调用 使用别名去注册中心上获取对应的服务调用地址
		String url = "http://zk-member/getMember";
		String result = restTemplate.getForObject(url, String.class);
		System.out.println("订单服务调用会员服务result:" + result);
		return result;
	}

}

启动多个会员项目,模拟集群,可以看到负载均衡的效果。

你可能感兴趣的:(分布式,springcloud)