Diretório de artigos
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
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
- 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>
- 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
7. Ligue para http://localhost:9093/getId
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
Chame a interface getConfigInfo
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
Chame a interface getConfigInfo novamente para visualizar os resultados retornados