Uma Introdução ao Spring Cloud Zookeeper

Uma Introdução ao Spring Cloud Zookeeper

*1. Introdução *

Neste artigo, vamos nos familiarizar com o Zookeeper e como ele é usado para o Service Discovery, que é usado como um conhecimento centralizado sobre os serviços na nuvem.

O Spring Cloud Zookeeper fornece Apache Zookeeper para aplicativos Spring Boot por meio de configuração automática e ligação ao ambiente Spring.

===* 2. Configuração de descoberta de serviço *

Vamos criar dois aplicativos:

*Um aplicativo que fornecerá um serviço (referido neste artigo como*  *_ Provedor de Serviços _* * __) __
*Um aplicativo que consumirá esse serviço (chamado* _Service Consumer_ *)

O Apache Zookeeper atuará como coordenador em nossa configuração de descoberta de serviço. As instruções de instalação do Apache Zookeeper estão disponíveis no seguinte link.

*3. Registro de provedor de serviços *

Ativaremos o registro do serviço adicionando a dependência spring-cloud-starter-zookeeper-discovery e usando a anotação _ @ EnableDiscoveryClient_ no aplicativo principal.

Abaixo, mostraremos esse processo passo a passo para o serviço que retorna o "Hello World!" em uma resposta às solicitações GET.

====* 3.1 Dependências do Maven *

Primeiro, vamos adicionar o https://search.maven.org/classic/search%7Cga%7C1%7Cspring-cloud-starter-zookeeper-discovery[spring-cloud-starter-zookeeper-discovery], spring-web, https://search.maven. org/classic/ search% 7Cga% 7C1% 7Cg% 3A% 22org.springframework.cloud% 22% 20% 20AND% 20a% 3A% 22spring-cloud-dependencies% 22 [spring-cloud-dependencies] e spring-boot-starter dependências para nossas arquivo pom.xml:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <version>1.5.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
        <version>4.3.7.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        <version>1.0.3.RELEASE</version>
     </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Brixton.SR7</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

====* 3.2 Anotações do provedor de serviços *

Em seguida, anotaremos nossa classe principal com _ @ EnableDiscoveryClient_. Isso fará com que o aplicativo HelloWorld reconheça a descoberta:

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

E um controlador simples:

@GetMapping("/helloworld")
public String helloWorld() {
    return "Hello World!";
}

====* 3.3 Configurações YAML *

Agora, vamos criar um arquivo YAML Application.yml que será usado para configurar o nível do log do aplicativo e informar ao Zookeeper que o aplicativo está ativado para descoberta.

O nome do aplicativo com o qual o Zookeeper é registrado é o mais importante. Posteriormente no consumidor do serviço, um cliente feign usará esse nome durante a descoberta do serviço:

spring:
  application:
    name: HelloWorld
  cloud:
    zookeeper:
      discovery:
        enabled: true
logging:
  level:
    org.apache.zookeeper.ClientCnxn: WARN

O aplicativo de inicialização por mola procura o tratador de zoológico na porta 2181 padrão. Se o zookeeper estiver localizado em outro lugar, a configuração precisará ser adicionada:

spring:
  cloud:
    zookeeper:
      connect-string: localhost:2181

===* 4. Consumidor de serviço *

Agora, criaremos um consumidor de serviço REST e o registraremos usando spring Netflix Feign Client.

====* 4.1 Dependência Maven *

Primeiro, vamos adicionar o https://search.maven.org/classic/search%7Cga%7C1%7Cspring-cloud-starter-zookeeper-discovery[spring-cloud-starter-zookeeper-discovery], spring-web, https://search.maven. org/classic/ search% 7Cga% 7C1% 7Cg% 3A% 22org.springframework.cloud% 22% 20% 20AND% 20a% 3A% 22spring-cloud-dependencies% 22 [spring-cloud-dependencies], spring-boot-starter-actuator e spring-cloud-starter-feign dependências em nosso arquivo pom.xml:

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        <version>1.0.3.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
        <version>1.5.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-feign</artifactId>
        <version>1.2.5.RELEASE</version>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Brixton.SR7</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

====* 4.2 Anotações de consumidor do serviço *

Assim como o provedor de serviços, anotamos a classe principal com _ @ EnableDiscoveryClient_ para torná-la sensível à descoberta:

@SpringBootApplication
@EnableDiscoveryClient
public class GreetingApplication {

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

====* 4.3 Descubra o serviço com o Feign Client *

Usaremos o _Spring Cloud Feign Integration, _ um projeto da Netflix que permite definir um cliente REST declarativo. Declaramos como a URL se parece e a fingida cuida da conexão com o serviço REST.

O Feign Client é importado via https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.springframework.cloud%22%20AND%20a%3A%22spring-cloud-starter- fingir% 22 [spring-cloud-starter-fingir] _ pacote. Anotaremos uma _ @ Configuração com _ @ EnableFeignClients_ para utilizá-la no aplicativo.

Por fim, anotamos uma interface com _ @ FeignClient ("nome do serviço") _ e a conectamos automaticamente em nosso aplicativo para que possamos acessar esse serviço programaticamente.

Aqui na anotação _ @ FeignClient (name = “HelloWorld”) , nos referimos ao _service-name do produtor de serviço que criamos anteriormente.

@Configuration
@EnableFeignClients
@EnableDiscoveryClient
public class HelloWorldClient {

    @Autowired
    private TheClient theClient;

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

        @RequestMapping(path = "/helloworld", method = RequestMethod.GET)
        @ResponseBody
    String helloWorld();
    }
    public String HelloWorld() {
        return theClient.HelloWorld();
    }
}

====* 4.4 Classe do Controlador *

A seguir, é apresentada uma classe simples de controlador de serviço que chamará a função do provedor de serviços em nossa classe de cliente fingido para consumir o serviço (cujos detalhes são abstraídos por meio da descoberta de serviço) por meio do objeto helloWorldClient da interface injetado e o exibe em resposta:

@RestController
public class GreetingController {

    @Autowired
    private HelloWorldClient helloWorldClient;

    @GetMapping("/get-greeting")
    public String greeting() {
        return helloWorldClient.helloWorld();
    }
}

====* 4.5 Configurações YAML *

Em seguida, criamos um arquivo YAML Application.yml muito semelhante ao usado anteriormente. Isso configura o nível de log do aplicativo:

logging:
  level:
    org.apache.zookeeper.ClientCnxn: WARN

O aplicativo procura o Zookeeper na porta 2181 padrão. Se o Zookeeper estiver localizado em outro lugar, a configuração precisará ser adicionada:

spring:
  cloud:
    zookeeper:
      connect-string: localhost:2181

===* 5. Testando a instalação *

O serviço REST HelloWorld se registra no Zookeeper na implantação. Em seguida, o serviço Greeting atuando como consumidor do serviço chama o serviço HelloWorld usando o cliente Feign.

Agora podemos criar e executar esses dois serviços.

Por fim, apontaremos nosso navegador para http://localhost: 8080/get-greeting [http://localhost: 8083/get-greeting] e ele deverá exibir:

Hello World!

===* 6. Conclusão*

Neste artigo, vimos como implementar a descoberta de serviço usando o Spring Cloud Zookeeper e registramos um serviço chamado HelloWorld no servidor Zookeeper para ser descoberto e consumido pelo serviço Greeting usando um Feign Client sem conhecer os detalhes de localização.

Como sempre, o código deste artigo está disponível no GitHub.