SpringCloudAlibaba: 서비스 등록 및 검색을 위한 Nacos 학습

목차

1. 서비스 등록 및 검색 소개

1. 공통등록센터

2. 서비스 등록 및 검색의 기본 프로세스는 다음과 같습니다.

3. 서비스 등록 및 검색의 주요 이점은 다음과 같습니다.

2. 알리바바 나코스 소개

3. 나코스의 기본 사용법

1. Linux 설치 패키지 모드 단일 노드 설치 및 배포

1. jdk 설치 구성

2. 나코스 설치

2. Nacos는 SpringBoot를 통합하여 서비스 등록 및 검색을 실현합니다.

1. 상위 프로젝트 생성

2. 기본 공개 모듈 생성(공통)

3. 사용자 모듈(user-module) 생성

4. 사용자 모듈을 nacos에 마이크로서비스로 등록합니다.

4. Feign 기반의 서비스 콜 구현

1) 페이그란 무엇인가

2) 로드 밸런싱이란 무엇을 의미하나요?

3) Feign 활용(주문 모듈 주문 생성)

1. 주문 모듈을 생성하고 종속성을 도입합니다.

2. 시작 클래스에 주석 추가

3.yml 파일 구성

4. OrderController 작성

5. 사용자 모듈의 pom 파일에 Fegin 종속성을 추가합니다.

6. 시작 클래스의 사용자 모듈에 Fegin 주석을 추가합니다.

7. 사용자 모듈에 대한 가상 인터페이스를 생성하고 Fegin을 사용하여 마이크로서비스 호출 구현

8. 컨트롤러가 호출하고 검증을 시작합니다. (사용자 서비스가 주문 서비스를 호출합니다.)

다섯, Nacos 도메인 모델 구분

1. 네임스페이스 구분

(1) 네임스페이스 생성

(2) 마이크로서비스 네임스페이스 구성

2. 그룹 구분

6. 로그 구성

1. 로컬 로그 구성

방법 1:

두 번째 방법

2. 글로벌 로그 구성

(1) 구성 파일 추가

(2) springboot의 로그 수준을 낮추십시오.

세븐, 나코스 통합 구성 관리

1. 구성 센터가 필요한 이유

2. 일반적으로 사용되는 구성 센터

나코스의 여러 개념

3. Nacos Configuration Center 활용

(1) 속성 형식

(2) yaml 형식

(3) 프로필.활성 - 세분성 구성

(4) 사용자 정의 확장의 데이터 ID 구성(공유 구성)

(5) 우선순위

(6) 동적 구성 새로 고침


1. 서비스 등록 및 검색 소개

서비스 등록 및 검색은 마이크로서비스 아키텍처의 핵심 구성 요소 중 하나입니다. 주요 역할은 서비스 소비자가 필요한 서비스를 제공하는 서비스 인스턴스를 동적으로 찾을 수 있도록 서비스 및 서비스 인스턴스의 정보를 관리하는 것입니다.

마이크로서비스 아키텍처에서는 비즈니스 서비스가 여러 개의 마이크로서비스로 분할되고, 각 서비스가 서로 통신하여 전체 기능을 완성합니다. 또한, 단일 장애 지점을 방지하기 위해 마이크로서비스는 고가용성 클러스터 모드로 배포되며, 클러스터 크기가 클수록 성능이 향상되며, 서비스 소비자는 여러 서비스 공급자로 구성된 클러스터를 호출해야 합니다.

첫째, 서비스 소비자는 로컬 구성 파일에 서비스 공급자 클러스터의 각 노드에 대한 요청 주소를 유지해야 합니다. 둘째, 서비스 제공자 클러스터의 노드가 오프라인이 되거나 다운되는 경우 서비스 소비자의 로컬 구성에서 해당 노드의 요청 주소를 동기적으로 삭제하여 다운된 노드에 요청이 전송되어 요청이 발생하는 것을 방지해야 합니다. 실패.

이러한 문제를 해결하기 위해서는 주로 다음과 같은 기능을 갖춘 서비스 등록센터의 도입이 필요하다.

  • 서비스 주소 관리.

  • 서비스 등록.

  • 서비스 동적 인식.

1. 공통등록센터

ZooKeeper, Eureka Consul, Etcd, Nacos 등 이러한 기능을 구현할 수 있는 컴포넌트가 많이 있습니다. 이번 장에서는 주로 알리바바의 나코스를 소개한다.

  1. Eureka: Netflix의 오픈 소스 서비스 등록 및 검색 구성 요소인 Spring Cloud는 이를 통합하여 즉시 사용 가능한 서비스 등록 및 검색 기능을 제공합니다.

  2. Consul: HashiCorp에서 제작한 서비스 그리드 솔루션인 Consul의 일부로, 서비스 등록 및 검색, 구성 관리, 서비스 모니터링 등의 기능을 제공합니다.

  3. Zookeeper: Apache의 최상위 프로젝트는 변경 푸시를 지원하는 트리 유형 디렉토리 서비스이며 서비스 등록 및 검색 구성 요소로 적합합니다.

  4. Etcd: CoreOS에서 개발한 신뢰할 수 있는 분산형 키-값 저장소로, 서비스 등록 및 검색을 위한 저장 매체로도 일반적으로 사용됩니다.

  5. Nacos: Nacos는 클라우드 네이티브 애플리케이션을 보다 쉽게 ​​구축할 수 있는 동적 서비스 검색, 구성 관리 및 서비스 관리 플랫폼입니다. 서비스 등록 검색 및 서비스 구성을 담당하는 Spring Cloud Alibaba의 구성 요소 중 하나이며 nacos=eureka+config로 간주할 수 있습니다.

2. 서비스 등록 및 검색의 기본 프로세스는 다음과 같습니다.

  1. 서비스가 시작되면 지정된 등록센터에 자체정보를 등록하세요. 정보에는 서비스 이름, 네트워크 주소, 포트 번호 등이 포함됩니다.

  2. 서비스 소비자는 등록 센터에서 필요한 서비스 정보를 얻고 서비스를 제공하는 모든 서비스 인스턴스 목록을 얻습니다.

  3. 서비스 소비자는 특정 로드 밸런싱 전략에 따라 서비스 인스턴스를 선택하고 호출을 시작합니다.

  4. 서비스 인스턴스가 중지되면 자체 정보가 등록 센터에서 로그아웃됩니다.

  5. 등록 센터는 인스턴스 변경 정보를 소비자에게 푸시합니다.

3. 서비스 등록 및 검색의 주요 이점은 다음과 같습니다.

  1. 서비스 소비자는 서비스 인스턴스 주소를 하드 코딩할 필요가 없으며 레지스트리는 느슨한 결합을 달성하기 위한 서비스 프록시 역할을 합니다.

  2. 서비스 제공업체는 소비자에게 영향을 주지 않고 탄력적으로 확장할 수 있습니다. 등록 센터는 변경 정보를 소비자에게 푸시합니다.

  3. 서비스를 모니터링하고 관리하기가 쉽고, 등록 센터를 통해 시스템에 어떤 서비스와 해당 인스턴스가 있는지 확인할 수 있습니다.

  4. 그레이 스케일 릴리스를 달성하는 데 도움이 되며 등록 센터에서 인스턴스 트래픽을 제어하여 원활한 업그레이드를 수행할 수 있습니다.

2. 알리바바 나코스 소개

Nacos는 Alibaba가 오픈소스로 제공하는 동적 서비스 검색, 구성 관리 및 서비스 관리 플랫폼으로, 클라우드 네이티브 애플리케이션을 보다 쉽게 ​​구축할 수 있습니다. Spring Cloud Alibaba 마이크로서비스 생태계의 중요한 구성 요소로서 주로 다음 기능을 제공합니다.

  1. 서비스 검색 및 서비스 상태 모니터링: DNS 기반 및 RPC 기반 서비스 검색을 지원하고 실시간 서비스 상태 모니터링을 제공합니다.

  2. 동적 구성 서비스: 중앙 집중식 구성과 분산 구성의 두 가지 모드를 지원하고 구성 변경 사항을 실시간으로 푸시할 수 있습니다.

  3. 서비스 관리: 서비스 오케스트레이션 관리, 서비스 격리, 가중치 관리 등의 서비스 관리 기능을 제공합니다.

3. 나코스의 기본 사용법

1. Linux 설치 패키지 모드 단일 노드 설치 및 배포

Nacos에는 세 가지 배포 모드가 있습니다.

  1. 독립형 모드: 테스트 및 개발 환경의 경우 클러스터를 지원하지 않습니다.

  2. 클러스터 모드: 프로덕션 환경에서 사용되며 클러스터 배포를 지원하고 고가용성을 보장합니다.

  3. 다중 데이터 센터 모드: 다중 데이터 센터 시나리오에 사용되며 데이터 센터 간 배포를 지원하고 최대 재해 복구를 보장합니다.

    참고: Nacos는 Java 환경에 따라 다르며 JDK1.8 이상을 사용해야 합니다.

Nacos를 설치하는 방법에는 두 가지가 있습니다. 하나는 소스 코드 설치이고, 다른 하나는 컴파일된 설치 패키지를 직접 사용하는 것입니다. 여기에서는 설치 패키지를 사용하여 설치하도록 선택합니다.

1. jdk 설치 구성

1) Linux에서 JDK를 설치하고 구성하려면 다음 단계가 필요합니다. 시스템에 JDK 및 JRE가 설치되어 있는지 확인합니다. 다음 명령으로 확인할 수 있습니다.

[root@localhost /]# java -version

2) 시스템에 JDK, JRE가 설치되어 있지 않은 경우 JDK를 다운로드하여 설치해야 합니다. 시스템에 적합한 JDK 설치 패키지를 다운로드하려면 Oracle 공식 웹 사이트를 참조하십시오. 다운로드 링크: Java 다운로드 | Oracle . 설치 패키지가 /opt/jdk-11.0.11_linux-x64_bin.tar.gz라고 가정합니다. 설치 패키지의 압축을 풉니다. 다음 명령을 사용할 수 있습니다:

tar -zxvf /opt/jdk-11.0.11_linux-x64_bin.tar.gz -C /opt/

3) 환경변수를 구성합니다. /etc/profile 파일을 엽니다:

sudo vi /etc/profile

4) 파일 끝에 다음을 추가합니다.

export JAVA_HOME=/opt/jdk-11.0.9 
export PATH=$JAVA_HOME/bin:$PATH

5) 그런 다음 파일을 저장하고 종료하십시오. 구성 파일을 즉시 적용하려면 다음 명령을 실행하십시오.

source /etc/profile

6) JDK가 성공적으로 설치 및 구성되었는지 확인합니다. 다음 명령을 사용할 수 있습니다:

java -version

이 명령을 실행하면 설치된 JDK 버전 정보를 볼 수 있습니다.

2. 나코스 설치

 1) nacos의 GitHub 주소를 다운로드합니다.

 2) Nacos 설치 패키지의 압축을 푼다

tar -zxvf nacos-server-2.2.2.tar.gz

압축 해제가 완료되면 압축이 풀린 디렉터리에 nacos 폴더가 표시됩니다.

3) 나코스 구성

압축이 풀린 nacos 디렉토리에 들어가서 conf/application.properties 파일을 수정합니다.

# 启用standalone模式(这个没有请自己添加)
nacos.standalone=true
# 修改端口号
server.port=8848
# 修改数据存储位置(XXX.XXX.XXX.XXX是网络中属性的IPv4地址,设置正确的数据库及用户名和密码)
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://XXX.XXX.XXX.XXX:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=your-db-username
db.password=your-db-password

4) Nacos 서비스를 시작하고 nacos 루트 디렉터리에 들어가서 다음 명령을 실행합니다.

[root@bogon nacos]# sh bin/startup.sh -m standalone

이로써 나코스 서비스가 시작됩니다. 시작 프로세스 중에 오류가 발생하면 로그 디렉터리에 있는 start.log 파일을 보고 특정 오류 정보를 볼 수 있습니다.

이름이 'grpcSdkServer'인 Bean을 생성하는 중 오류가 발생했습니다. init 메서드 호출에 실패했습니다. 중첩된 예외는 java.io.IOException입니다. 주소 0.0.0.0/0.0.0.0:9848에 바인딩하지 못했습니다.

당시에 이 오류를 보고했는데 항상 포트 9848에 관한 것이었습니다.

나는 두 가지 방법을 시도했습니다.

1. 서비스를 종료합니다: [root@localhost bin]# sh shutdown.sh 서비스를 다시 시작해 보세요.

2. 다른 말이 있다면 /nacos/conf/application.properties 설정 파일에 문제가 있는 것입니다.

5) Nacos 서비스에 액세스합니다(xxx.xxx.xxx.xxx ip a 명령을 사용하여 IP 주소를 확인합니다). Nacos의 기본 액세스 주소는 http://xxx.xxx.xxx.xxx:8848/nacos 입니다. 브라우저에 입력된 주소입니다. 이 주소는 Nacos 서비스에 접속하는 데 사용됩니다. 모든 것이 정상이면 Nacos 로그인 인터페이스가 표시되며 기본 계정(nacos)과 비밀번호(nacos)를 입력하여 로그인합니다.

지금까지 Nacos가 성공적으로 설치되었습니다.

이 시점에서 다음과 같은 문제가 발견됩니다.

권한 인증 스킵, 로그인 없이 입장 가능, 이전에 작성한 블로그 열람 가능 : 인증 활성화

2. Nacos는 SpringBoot를 통합하여 서비스 등록 및 검색을 실현합니다.

1. 상위 프로젝트 생성

Maven 프로젝트를 생성한 후 다음 내용의 각 버전별 해당 관계를 pom.xml 파일에 추가합니다 공식 홈페이지 참고 : 공식 홈페이지 버전 해당 관계 설명 주소

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>BK-SpringCloud</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.6.11</version>
    </parent>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2021.0.4</version>
                <type>pom</type>
				<scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2021.0.4.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

2. 기본 공개 모듈 생성(공통)

pom.xml에 종속성 추가

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>BK-SpringCloud</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>alibaba-common</artifactId>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.15</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
</project>

3. 사용자 모듈(user-module) 생성

단계:

1 모듈 가져오기 종속성 생성

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>BK-SpringCloud</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>alibaba-user</artifactId>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>alibaba-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

2 SpringBoot 메인 클래스 생성

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

3 yml 구성 파일 추가

spring:
  application:
    name: user-server
  datasource:
    druid:
      url: jdbc:mysql://localhost:3306/nacos?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: 123456

4. 사용자 모듈을 nacos에 마이크로서비스로 등록합니다.

다음으로 alibaba-user 모듈의 코드 수정을 시작하고 이를 nacos 서비스에 등록합니다.

1) pom.xml에 nacos 종속성을 추가합니다.

<!--nacos客户端-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2) 메인 클래스에 @EnableDiscoveryClient 주석을 추가합니다.

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

3) application.yml에 nacos 서비스 주소를 추가합니다.

spring:
  application:
    name: user-server
  datasource:
    druid:
      url: jdbc:mysql://localhost:3306/user?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: 123456
  cloud:
    nacos:
      discovery:
        username: nacos
        password: nacos
        server-addr: 192.168.177.129:8848

4) 서비스를 시작하고 nacos 제어판에 등록된 사용자 마이크로서비스가 있는지 확인합니다.

4. Feign 기반의 서비스 콜 구현

1) 페이그란 무엇인가

Feign은 마이크로서비스 간 호출을 더 쉽게 만들어주는 선언적 웹 서비스 클라이언트입니다. Feign은 Ribbon과 Hystrix를 내부적으로 캡슐화하고 로드 밸런싱 및 서비스 내결함성 기능을 갖추고 있습니다.

Feign의 주요 기능은 인터페이스를 생성하고 주석을 추가하여 다른 마이크로서비스를 호출하는 것입니다. 인터페이스를 사용하여 다른 마이크로서비스를 호출하고 리본과 Hystrix를 결합하여 로드 밸런싱 및 서비스 내결함성을 달성하므로 원격 호출의 복잡성이 크게 단순화됩니다.

Feign을 사용하면 다음과 같은 주요 이점을 얻을 수 있습니다.

  1. 서비스 호출의 복잡성 숨기기: Feign은 인터페이스를 정의하여 선언적인 방식으로 서비스를 호출합니다. 이는 개발자가 서비스를 직접 호출하는 프로세스를 단순화합니다.

  2. 로드 밸런싱 기능 포함: Feign에는 서비스 호출의 로드 밸런싱을 실현할 수 있는 리본 로드 밸런싱 클라이언트가 내장되어 있습니다.

  3. 서비스 내결함성 기능: Feign에는 Hystrix 서비스 내결함성 구성 요소가 내장되어 있어 서비스 호출 중 서비스 저하 및 서비스 융합과 같은 서비스 내결함성 기능을 실현할 수 있습니다.

  4. 다양한 서비스 호출 방법 지원: Feign에는 확장성이 뛰어난 HTTP, TCP 및 기타 서비스 호출 방법이 내장되어 있습니다.

  5. 요청 재시도 메커니즘 사용: 지정된 재시도 시간 내에 서비스 호출을 재시도하여 서비스 호출의 안정성을 향상시킵니다.

  6. GZIP 압축 지원: GET 요청을 보낼 때 요청 및 응답에 대해 GZIP 압축을 지원하여 네트워크 전송 효율성을 향상시킵니다.

  7. 로깅 지원: Feign은 로깅을 위해 SLF4J 사용을 지원하므로 서비스 호출 디버깅 및 추적에 편리합니다.

주요 사용 단계:

  1. 가짜 의존성 추가

  2. 서비스 인터페이스 생성 및 @FeignClient 주석 추가

  3. 인터페이스를 사용하여 직접 서비스 호출

  4. 서비스 호출에 대한 시간 초과, 재시도 등을 구성합니다.

  5. 서비스 다운그레이드 Fallback 클래스를 정의하고 서비스를 사용할 수 없을 때 기본 다운그레이드 값을 반환합니다.

2) 로드 밸런싱이란 무엇을 의미하나요?

로드 밸런싱(Load Balancing)은 여러 컴퓨팅 자원에 작업 부하를 분산시켜 컴퓨팅 자원의 활용 효율성을 극대화하는 컴퓨터 기술입니다.

분산 시스템에서는 여러 서비스 인스턴스를 배포하면 서비스의 고가용성과 확장성을 달성할 수 있습니다. 로드 밸런서를 통해 클라이언트의 요청을 서비스 인스턴스 간에 분산시켜 로드의 균형 있는 분산 및 관리를 실현할 수 있습니다.

테스트: 두 명의 사용자를 시작하고(포트 변경, 컨트롤러 메서드에서 콘텐츠 변경) 인터페이스를 통해 호환되지 않는 콘텐츠에 액세스합니다.

3) Feign 활용(주문 모듈 주문 생성)

1. 주문 모듈을 생성하고 종속성을 도입합니다.

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>SpringCloudAlibaba</artifactId>
        <groupId>com.buba</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>order</artifactId>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.buba</groupId>
            <artifactId>common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--nacos客户端-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
</project>

2. 시작 클래스에 주석 추가

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

3.yml 파일 구성

spring:
  application:
    name: order-server
  datasource:
    druid:
      url: jdbc:mysql://localhost:3306/nacos?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: 123456
  cloud:
    nacos:
      discovery:
        username: nacos
        password: nacos
        server-addr: 192.168.177.129:8848
server:
  port: ${random.int[0000,9999]}

4. OrderController 작성

@RestController
@RequestMapping("order")
public class OrderController {
    @RequestMapping("/get1")
    public Integer get1(){
        return 111;
    }
}

5. 사용자 모듈의 pom 파일에 Fegin 종속성을 추가합니다.

<dependencies>
    <dependency>
        <groupId>com.buba</groupId>
        <artifactId>common</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <!--nacos客户端-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>

6. 시작 클래스의 사용자 모듈에 Fegin 주석을 추가합니다.

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients//开启Fegin
public class UserApp {
    public static void main( String[] args ) {
        SpringApplication.run(UserApp.class, args);
    }
}

7. 사용자 모듈에 대한 가상 인터페이스를 생성하고 Fegin을 사용하여 마이크로서비스 호출 구현

@FeignClient(value = "order-server",path = "/order")//声明调用的提供者的name
public interface OrderFeign {
    // 指定调用提供者的哪个方法
    // @FeignClient+@GetMapping 就是一个完整的请求路径 http://serviceproduct/product/{pid}
    @GetMapping("/get1")
    Integer get1();
}

8. 컨트롤러가 호출하고 검증을 시작합니다. (사용자 서비스가 주문 서비스를 호출합니다.)

@RestController
@RequestMapping("user")
public class UserController {
    @Resource
    private OrderFeign orderFeign;
    @RequestMapping("/get1")
    public Integer get1(){
        return orderFeign.get1();
    }
}

다섯, Nacos 도메인 모델 구분

1. 네임스페이스 구분

NameSpace(기본 NameSpace는 "public"이며 NameSpace는 리소스 격리를 수행할 수 있습니다. 예를 들어 개발 환경의 NameSpace 아래 서비스는 prod의 NameSpace 아래 마이크로서비스를 호출할 수 없습니다.)

(1) 네임스페이스 생성

개발 개발 환경

테스트 테스트 환경

사전 제작 환경

(2) 마이크로서비스 네임스페이스 구성

spring:
  application:
    name: order-server
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.177.129:8848
        namespace: 9f5444ba-f5a0-4745-99aa-e15e8cca08cd

2. 그룹 구분

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.177.129:8848
        group: group2

6. 로그 구성

1. 로컬 로그 구성

방법 1:

(1) 로그 레벨 설정

참고: 이 클래스에는 @Configuration 주석이 없습니다.

public class FeginConfig {
    @Bean
    public Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}

(2) 타겟 페이그 구성

@FeignClient(value = "repository-server",path = "/repositoty",configuration = FeginConfig.class)
public interface RepositotyFeign {
    @GetMapping("/getNum/{goodId}")
    Integer getNum(@PathVariable("goodId") Integer goodId);
}

두 번째 방법

feign:
  client:
    config:
      repository-server:
        loggerLevel: debug

2. 글로벌 로그 구성

(1) 구성 파일 추가

참고: 이 클래스에는 @Configuration 주석이 있습니다.

@Configuration
public class FeginConfig {
    @Bean
    public Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}

(2) springboot의 로그 수준을 낮추십시오.

logging:
  level:
    com.buba.feign: debug

세븐, 나코스 통합 구성 관리

1. 구성 센터가 필요한 이유

구성 센터는 시스템 구석구석에 구성 정보를 배포하는 기존 방식과 다르며, 개별 서버를 하나씩 관리할 필요 없이 시스템의 구성 파일 관리를 중앙 집중화하고 통합합니다. 그렇게 하면 어떤 이점이 있나요?

(1) 구성 센터를 통해 구성을 표준화하고 형식을 통일할 수 있습니다.

(2) 구성 정보가 변경되면 실시간으로 수정 사항이 적용되며, 서버를 다시 시작하지 않고도 해당 변경 사항을 자동으로 감지할 수 있으며, 새로운 변경 사항을 해당 프로그램에 일관적으로 전송하여 변경 사항에 빠르게 대응할 수 있습니다. 예를 들어, 특정 기능은 특정 지역의 사용자에게만 제공되고, 특정 기능은 대규모 프로모션 기간에만 사용할 수 있습니다. 구성 센터를 사용한 후 관련 담당자만 구성 센터에서 매개변수를 동적으로 조정하면 됩니다. 기본적으로 실시간일 수도 있고 준실시간일 수도 있으며, 해당 업무를 조정하세요.

(3) 감사 기능을 통해서도 문제 추적이 가능합니다.

2. 일반적으로 사용되는 구성 센터

마이크로서비스의 구성 센터에는 Nacos, Apollo, Config+Bus의 세 가지 주요 솔루션이 있지만 여기서는 주로 Nacos를 구성 센터로 사용하는 방법을 소개합니다.

나코스의 여러 개념

네임스페이스 (Namespace) 네임스페이스는 다양한 환경의 구성을 격리하는 데 사용할 수 있습니다. 일반적으로 환경은 네임스페이스 구성 그룹 (Group)으로 구분됩니다. 구성 그룹은 서로 다른 서비스를 동일한 그룹으로 분류하는 데 사용됩니다. 일반적으로 프로젝트의 구성은 구성 집합 (Data ID)의 집합으로 나누어집니다. 시스템에서 구성 파일은 일반적으로 구성 집합입니다. 일반적인 마이크로서비스의 구성은 구성 세트입니다.

3. Nacos Configuration Center 활용

nacos를 구성 센터로 사용하는 것은 실제로 nacos를 서버로, 각 마이크로서비스를 클라이언트로 취급하는 것이며, 각 마이크로서비스의 구성 파일을 nacos에 저장한 다음 각 마이크로서비스가 nacos에서 구성을 가져옵니다.

(1) 속성 형식

1. 종속성 가져오기

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

2. 구성 센터 + 번호에서 새 구성을 만듭니다.

3. 구성 파일 이름 수정

프로젝트의 application.yml을 bootstrap.yml로 수정합니다.

 

4. 마이크로서비스에 nacos 구성 서비스 주소 구성을 추가합니다.

5. 등록 센터의 구성을 얻기 위한 테스트

@RestController
@RequestMapping("user")
public class UserController {
    @Value("${author}")
    private String author;
    @RequestMapping("/get1")
    public String get1(){
        return author;
    }
}

6. 데이터베이스 구성을 구성 센터로 이동하고, 프로젝트에서 데이터 소스 구성을 수정할 수 있습니다.

spring.datasource.druid.url=jdbc:mysql://localhost:3306/nacos?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.username=root
spring.datasource.druid.password=123456

물론 Configuration Center가 구성되어 있으면 yml 파일에서는 삭제됩니다.

7. 새로운 구성 클래스

@Configuration
public class DataSourceConfig {
    @Value("${spring.datasource.druid.username}")
    private String username;
    @Value("${spring.datasource.druid.password}")
    private String password;
    @Value("${spring.datasource.druid.url}")
    private String url;
    @Value("${spring.datasource.druid.driver-class-name}")
    private String driverClassName;
    @Bean
    public DataSource dataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setUrl(url);
        druidDataSource.setUsername(username);
        druidDataSource.setPassword(password);
        druidDataSource.setDriverClassName(driverClassName);
        return druidDataSource;
    }
}

dataSource를 얻을지 여부를 테스트하기 위해 요점을 깨뜨릴 수 있습니다.

(2) yaml 형식

1. 구성 센터에서 새 구성을 만듭니다.

2. 프로젝트 구성 파일 이름을 bootstrap.yml로 수정하고 구성 파일 구성을 수정합니다.

(3) 프로필.활성 - 세분성 구성

1. 구성 센터에서 구성을 생성합니다.

데이터 ID: 서비스 이름-profileN 이름, 접미사 이름(order-server-mysql.yaml)

2. 엔지니어링 모듈 구성

spring:
  application:
    name: user-server
  cloud:
    nacos:
      discovery: # 服务注册与发现
        username: nacos
        password: nacos
        server-addr: 192.168.177.129:8848
      config: # 配置中心
        username: nacos
        password: nacos
        server-addr: 192.168.177.129:8848
        file-extension: yaml
        group: group1 # 分组
        namespace: 9f5444ba-f5a0-4745-99aa-e15e8cca08cd # 命名空间
  profiles:
    active: mysql # 粒度配置
server:
  port: ${random.int[1000,9999]}
feign:
  client:
    config:
      default: # 全局,如果单个服务,写服务名称即可(user-server)
        #建立连接所用的时间,适用于网络状况正常的情况下,两端连接所需要的时间
        connect-timeout: 5000
        #指建立连接后从服务端读取到可用资源所用的时间
        read-timeout: 5000

(4) 사용자 정의 확장의 데이터 ID 구성(공유 구성)

우리의 마이크로서비스 수가 늘어나면 필연적으로 동일한 구성이 존재하게 되는데, 이때 클러스터 내 데이터소스 정보, 로그 구성 정보, nacos 등 프로젝트 내 공통 구성과 동일한 구성을 추출할 수 있다. 하나의 구성 센터에 여러 구성 세트를 작성하는 방법이 지원됩니다.

사례 발표:

1. 데이터 ID redis.yaml 및 mysql.yaml을 사용하여 nacos에 두 개의 새 파일을 생성합니다.

2. 구성 파일에 일부 구성 콘텐츠를 추가합니다.

redis.yaml

 mysql.yaml

 ** 3. Springboot 프로젝트에 다음 nacos 구성을 추가합니다. **

전체 yml 구성:

spring:
  application:
    name: user-server
  cloud:
    nacos:
      discovery: # 服务注册与发现
        username: nacos
        password: nacos
        server-addr: 192.168.177.129:8848
      config: # 配置中心
        username: nacos
        password: nacos
        server-addr: 192.168.177.129:8848
        file-extension: yaml
        extension-configs[0]: # 多个 Data Id的配置
          data-id: redis.yaml
          group: DEFAULT_GROUP # 默认为DEFAULT_GROUP
          refresh: true # 是否动态刷新,默认为false
        extension-configs[1]:
          data-id: mysql.yaml
          group: DEFAULT_GROUP # 默认为DEFAULT_GROUP
          refresh: true # 是否动态刷新,默认为false
#        group: group1 # 分组
#        namespace: 9f5444ba-f5a0-4745-99aa-e15e8cca08cd # 命名空间
  profiles:
    active: mysql # 粒度配置

팁 1: 여러 데이터 ID가 동시에 구성되면 우선순위 관계는 spring.cloud.nacos.config.ext-config[n].data-id입니다. 여기서 n 값이 클수록 우선순위가 높아집니다.

팁 2: spring.cloud.nacos.config.ext-config[n].data-id 값에는 파일 확장자가 있어야 하며 파일 확장자는 속성과 yaml/yml을 모두 지원할 수 있습니다. 현재 spring.cloud.nacos.config.file-extension 구성은 사용자 정의 확장 구성의 Data Id 파일 확장자에 영향을 미치지 않습니다.

(5) 우선순위

Nacos Config는 현재 Nacos에서 관련 구성을 가져오는 네 가지 구성 기능을 제공합니다.

A: spring.cloud.nacos.config.shared-configs[0].dataids를 통해 여러 공유 데이터 ID 구성을 지원합니다.

B: spring.cloud.nacos.config.extension-configs[0].data-id를 통해 여러 확장 데이터 ID의 구성을 지원합니다.

C: 애플리케이션 이름 user-server.yaml 애플리케이션 구성

D: 애플리케이션 이름 + 프로필 user-server-dev.yaml 세분화된 구성

# 우선순위: 세분화된 구성 > 애플리케이션 구성 > Extension-configs[n] 구성(n이 클수록 우선순위가 높음) > shared-configs[n] 구성(n이 클수록 우선순위가 높음) D > C > 비 > 에이

(6) 동적 구성 새로 고침

주석 방법(권장)

@RestController
@RefreshScope // 在需要动态读取配置的类上添加此注解就可以(动态配置刷新)
@RequestMapping("/nacos-config")
public class NacosConfigController {
    @Value("${config.appName}")
    private String appName;
    //2 注解方式
    @GetMapping("/test")
    public String nacosConfingTest() {
        return appName;
    }
}

추천

출처blog.csdn.net/Microhoo_/article/details/130999757