springcloud — instalação e uso de nacos

1. Introdução ao Nacos

Nacos é o acrônimo de Dynamic Naming and Configuration Service, uma plataforma dinâmica de descoberta de serviços, gerenciamento de configuração e gerenciamento de serviços que facilita a criação de aplicativos nativos da nuvem.

2. nacos vs. Eureka

centro de registro Spring Cloud Nacos Primavera Nuvem Eureca
modelo CAP Suporta modelos AP e CP modelo AP
Informações do serviço de atualização do cliente Use o modo de verificação de integridade register+DNS-f+. O cliente DNS-F usa push/pull no modo de escuta para obter informações de atualização O cliente consulta regularmente o servidor para obter as informações de IP de outros serviços e as compara. Em contrapartida, o servidor está sob maior pressão e tem um atraso maior
Escalabilidade O uso do algoritmo de eleição Raft tem melhor desempenho, disponibilidade e tolerância a falhas, e novos nós não precisam transmitir informações de sincronização com todos os nós Devido ao uso de informações de sincronização de transmissão, a pressão no cluster eureka é grande depois que o cluster excede 1000 máquinas
Modo/método de verificação de integridade Suporte ao modo de inspeção servidor/cliente/fechar, os métodos de inspeção incluem tcp, http, sql. Suporte para construir seu próprio verificador de integridade O cliente envia um heartbeat http para o servidor
balanceamento de carga apoiar apoiar
Modo de serviço online e offline manual Via página de console e API Ao chamar a API
Sincronização entre centros apoiar não suporta
integração k8s apoiar não suporta
grupo Nacos pode ser usado para gerenciamento de grupos de acordo com o negócio e o ambiente não suporta
Pesos Nacos fornece a função de configuração de peso por padrão para ajustar a pressão de tráfego do rolamento não suporta
fabricantes Alibaba Netflix

3. instalação de nacos

Instalação oficial (muito lenta para baixar): Baixe o guia de instalação

instalação do docker

#拉取镜像
docker pull nacos/nacos-server 
#创建容器
 docker run -d -p 8848:8848 -e MODE=standalone -e PREFER_HOST_MODE=hostname -v /usr/app/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties -v /usr/app/nacos/logs:/home/nacos/logs --restart always --name nacos nacos/nacos-server

Insira o endereço da página de fundo localhost::8848/nacos default account/password admin/admin
insira a descrição da imagem aqui

4. centro de registro de nacos

Usamos nacos como centro de registro, criamos dois serviços, A e B, e os registramos em nacos, e usamos openfeign+ribbon para implementar o serviço B para chamar a interface de serviço A

4.1 O serviço A está registrado em nacos

  1. Um serviço pom dependências (adicione apenas dependências nacos, adicione outras dependências de acordo com suas necessidades)
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
  1. Um arquivo de configuração de serviço bootstrap.yml

Observação: quando o serviço springboot é iniciado, ele primeiro procura o arquivo de configuração bootstrap.yml, depois procura o application.yml e, finalmente, mescla os dois conteúdos

server:
  port: 8099
  #服务名称
spring:
  application:
    name: a-server
    #ncaos地址
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
# 指定开放的端点路径, * 代表全部
management:
  endpoints:
    web:
      exposure:
        include: '*'

3. Crie uma classe de inicialização de serviço, adicione@EnableDiscoveryClient

Durante o processo de inicialização do projeto, descobriu-se que a classe de inicialização precisa ser colocada no diretório de terceiro nível e um erro será relatado

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

4. Crie uma classe controladora.
Expomos uma interface de serviço para fora, usamos o serviço B posteriormente, obtemos o endereço da interface por meio de nacos e, finalmente, chamamos

@RestController
@RequestMapping("/Aserver")
public class AserverController {
    
    

    @GetMapping("/getRandom")
    private String getRandom() {
    
    
        Random random = new Random();
        int i = random.nextInt();
        return "本次刷新值为:" + i;
    }
}
 }
}

4.2 Crie o serviço B e coloque-o em nacos

1. Adicione dependências

       <!-- openfeign 依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud </groupId>
            <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

2. Crie a configuração do arquivo de configuração de serviço B bootstrap.yml

server:
  port: 9093
spring:
  application:
    name: b-server
  cloud:
    nacos:
      discovery:
        server-addr: 39.105.151.241:8848
management:
  endpoints:
    web:
      exposure:
        include: '*'

3. Criar classe de inicialização do serviço B


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

4. Crie uma interface openfeign

A anotação @FeignClient é o nome da anotação em openfeign e é o valor spring.application.name no arquivo de configuração de serviço A.

@Component
@FeignClient(name = "a-server")
@RequestMapping("/provider")
public interface AserverService{
    
    
    @GetMapping("/getRandom")
     String providerCase();
}

5. Crie a classe Controller do serviço B e chame a interface do serviço A

@RestController
public class AServerController {
    
    
    @Autowired
    private AserverService AserverService;

    @GetMapping("getId")
    public String getId() {
    
    
        String s = AserverService.getRandom();
        return "A服务返回结果"+s;
    }

}

6. Iniciamos os projetos A e B e entramos na página nacos para visualizar a lista de serviços

insira a descrição da imagem aqui
7. Ligue para http://localhost:9093/getId
insira a descrição da imagem aqui

5 Centro de Configuração

O serviço de configuração dinâmica permite centralizar, externalizar e gerenciar dinamicamente a configuração de aplicativos e configuração de serviços de todos os ambientes. A configuração dinâmica elimina a necessidade de reimplantar aplicativos e serviços quando a configuração é alterada, tornando o gerenciamento de configuração mais eficiente e ágil

Introduzir dependência em um serviço

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

Um conteúdo do arquivo de configuração bootsrap.yml do serviço

server:
  port: 8099
spring:
  application:
    name: a-server
    #ncaos地址
  cloud:
    nacos:
      discovery:
        server-addr: 39.105.151.241:8848
      #配置中心的地址
      config:
        server-addr: 39.105.151.241:8848
        file-extension: yml
# 指定开放的端点路径, * 代表全部
management:
  endpoints:
    web:
      exposure:
        include: '*'
#我们需要更新配置内容
config:
  info: a_server_test_01

Crie uma interface de teste

A anotação @RefreshScope atualizará automaticamente o arquivo de configuração

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigInfoController {
    
    

    @Value("${config.info}")
    private  String configInfo;

    @GetMapping("/getInfo")
    public  String getConfigInfo(){
    
    
        return  "配置内容:"+configInfo;
    }

Inicie o projeto A e entre na lista de configuração

insira a descrição da imagem aquiChame a interface getConfigInfo
insira a descrição da imagem aqui
para criar um arquivo de configuração e publicá-lo

A ID de dados é spring.application.name + sufixo do arquivo de configuração em um arquivo de configuração de serviço

insira a descrição da imagem aquiChame a interface getConfigInfo novamente para visualizar os resultados retornados
insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/qq_46645840/article/details/128914133
Recomendado
Clasificación