SpringCloud-Alibaba-Nacos服务注册和配置中心--一篇入门

x33g5p2x  于2021-12-18 转载在 其他  
字(4.6k)|赞(0)|评价(0)|浏览(378)

前言:
前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service
一个更易于构建云原生应用的动态服务发现,配置管理和服务管理中心
Nacos 有自己独立的,注册和配置 服务端。不像Eureka我还得去起服务端才能注册。

Nacos支持AP和CP模式切换
如果不需要存储服务级别的信息且服务示例是通过 nacos-clien注册并且能够保持心跳上报,那么就可以选择AP模式。当前主流的cloud和dubbo服务,都适用与AP模式。AP模式为了服务的可能性减弱了一致性,因此AP模式下只支持注册临时的实例

如果需要在服务级别编辑或者存储信息那么是CP,K8S,DNS服务则适用CP模式,CP模式下则支持注册持久化实例,此时则是以Raft协议为集群运行模式,该模式下注册实例之前必须注册服务,如果不存在,则返回 错误

切换

curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'

Nacos = Eureka+Config+Bus

下载地址:https://nacos.io/zh-cn/index.html

我下载的win版的

下载解压:

启动前小插曲:
下载下来的nacos-server使用的时cluster集群模式,这个模式是要求使用mysql的
启动
所以需要改一下配置改成单机的

修改启动文件 standalone

D:\work\nacos\nacos\bin

双击startup.cmd

启动成功访问
http://localhost:8848/nacos
账号密码都是:nacos

登入后页面

使用示例:

pom 依赖
使用Nacos首先有cloud-alibaba的依赖

<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.1.1.BUILD-SNAPSHOT</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

Nacos的依赖

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

YML

server:
  port: 8089

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址

management:
  endpoints:
    web:
      exposure:
        include: '*'

启动类

package com.tang.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class NacosPaymentProvider8089 {

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

}

启动项目测试注册
刷新nacos 看到我闷得服务已经注册进去了

创建消费工程

nacos 再带负载均衡
pom:
消费项目

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

yml

server:
  port: 84

spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

service-url:
  nacos-user-service: http://nacos-payment-provider

主启动类和以上一样
调用要借助RestTemplate

@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate()
    {
        return new RestTemplate();
    }
}

controller

package com.tang.cloud.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

@RestController
@Slf4j
public class OrderNacosController
{
    @Resource
    private RestTemplate restTemplate;

    @Value("${service-url.nacos-user-service}")
    private String serverURL;

    @GetMapping(value = "/consumer/payment/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Long id)
    {
        return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
    }

}

测试
nacos自带的父子均衡就是Ribbon

nacos配置中心

示例:
首先pom
nacos-config依赖

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

bootstrap.yml

# nacos配置
server:
  port: 8091

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yml

controller
@RefreshScope自动刷新配置

package com.tang.cloud.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope //支持Nacos的动态刷新功能。
public class ConfigClientController
{
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}

配置nacos的配置yml

启动项目 访问 能读到配置就可以了

分组就可以切换配置

改yml
添加:group: tang

# nacos配置
server:
  port: 8091

spring:
  application:
    name: test
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yml 
         group: tang

空间:

新建

此时就多出一个空间

在新空间 创建配置文件测试:

当然要修改yml文件
增加namespace: tang 就是创建空的唯一ID 让配置文件找到它

# nacos配置
server:
  port: 8091

spring:
  application:
    name: test
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yml 
        group: tang
        namespace: tang

改好启动项目测试

nacos 集群 见一篇
https://blog.csdn.net/weixin_44520739/article/details/109842478

相关文章