Spring Cloud学习——如何使用zookeeper作为注册中心

1.使用docker部署zookeeper 

 下载镜像:

 docker pull zookeeper:3.5

 运行容器:

 docker run --privileged=true -d --name zookeeper1 --publish 2182:2181  -d zookeeper:3.5

2.搭建服务提供者

 添加maven配置

    <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.7.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
        <dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
    		<groupId>org.springframework.cloud</groupId>
    		<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
		</dependency>
		
    </dependencies>
	
	<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    application.yml文件

spring:
  application:
    name: HelloWorld
  cloud:
    zookeeper:
      connect-string: 192.168.180.129:2182
      discovery:
        enabled: true
server:
  port: 8081
endpoints:
  restart:
    enabled: true
logging:
  level:
    org.apache.zookeeper.ClientCnxn: WARN

     在Application类添加注解@EnableDiscoveryClient和@SpringBootApplication

@EnableDiscoveryClient
@SpringBootApplication
public class ServiceZKApplication {

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

    创建controller,serviceUrl()方法返回结果为已注册成功的服务提供者实例。

@RestController
@RequestMapping("/zookeeper")
public class ZookeeperController {
	@Value("${spring.application.name}")
    private String instanceName;

    private final DiscoveryClient discoveryClient;

    @Autowired
    public ZookeeperController(DiscoveryClient discoveryClient) {
        this.discoveryClient = discoveryClient;
    }

    @GetMapping
    public String hello() {
        return "Hello,Zookeeper.";
    }

    @GetMapping("/services")
    public List<String> serviceUrl() {
        List<ServiceInstance> list = discoveryClient.getInstances(instanceName);
        List<String> services = new ArrayList<>();
        if (list != null && list.size() > 0 ) {
            list.forEach(serviceInstance -> {
                services.add(serviceInstance.getUri().toString());
            });
        }
        return services;
    }

}

    3.服务消费者

      本例采用feign client方式调用服务

      maven配置,相比服务提供者,多了一个feign引用

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.7.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
  </parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
        <dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
    		<groupId>org.springframework.cloud</groupId>
    		<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
		</dependency>
		<dependency> 
    		<groupId>org.springframework.cloud</groupId>
    		<artifactId>spring-cloud-starter-feign</artifactId>
    		<version>1.4.6.RELEASE</version>
		</dependency>
    </dependencies>
	
	<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    application.properties,也可以用yml文件

spring.application.name=service-zookeeper
server.port=8083
management.security.enabled=false
spring.cloud.zookeeper.connect-string=192.168.180.129:2182

 

 feign调用方法 

@Configuration
@EnableFeignClients
@EnableDiscoveryClient
public class HelloWorldClient {
	@Autowired
    private TheClient theClient;

    @FeignClient(name = "HelloWorld")
    interface TheClient {

        @RequestMapping(path = "/zookeeper/services", method = RequestMethod.GET)
        @ResponseBody
        String HelloWorld();
    }

    public String HelloWorld() {
        return theClient.HelloWorld();
    }
}

    新建controller调用HelloWorldClient 

@RestController
public class HelloWorldController {
	@Autowired
    private HelloWorldClient helloWorldClient;

    @GetMapping("/test1")
    public String sayhello() {

        return helloWorldClient.HelloWorld();

    }
}

    将服务提供者和服务消费者分别运行起来

     调用消费者接口 http://127.0.0.1:8083/test1

     直接调用提供者接口  http://127.0.0.1:8081/zookeeper/services

     这两个结果应该是一样的,都返回了服务提供者的实例列表。

    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值