SpringCloud Alibaba (1) マイクロサービスの紹介 + Nacos のインストールとデプロイ + Nacos と Springboot の統合によるサービス登録の実現 + Feign によるサービス間のリモート呼び出し + 負荷分散 + ドメイン分割

目次

1. マイクロサービスを理解する

1.0. 学習目標

1.1. モノリシックアーキテクチャ

モノリシック アーキテクチャの長所と短所は次のとおりです。

1.2. 分散アーキテクチャ

分散アーキテクチャの長所と短所:

1.3. マイクロサービス

マイクロサービスのアーキテクチャ上の特徴:

1.4.スプリングクラウド

1.5 ナコス登録センター

1.6. 概要

2.Nacos基本利用インストール導入+サービス登録

(1) Linux インストール パッケージの単一ノードのインストールと展開

1.JDKのインストール設定

2.nacosのインストール

(2) Linux ソース コード モードでの単一ノードのインストールとデプロイメント

1. Nacos ソースコードをダウンロードして解凍する、別の方法

2.Nacosの設定

3. データベースとデータテーブルの作成

4. ナコスを開始する

(3) Nacos は SpringBoot を統合してサービスの登録と検出を実現します

1.親プロジェクトを作成する

2. 基本的なパブリックモジュールを作成する

3. ユーザーモジュールを作成する

4. ユーザーモジュールをnacosにマイクロサービスとして登録する

(4) ログインの問題を解決する

3. Feign はサービス間のリモート呼び出し + ロードバランシング + ドメインモデル分割を実装します

(1) フェイクとは

(2) フェーンの使用

1. Fegin の依存関係を追加する

2. ユーザーモジュール起動クラスに Fegin アノテーションを追加する

3. order-module モジュールを作成する

4. feign インターフェイスを作成し、Fegin を使用して注文モジュールのデータを呼び出すマイクロサービスを実装します。

5. コントローラーは feign を呼び出し、ユーザー モジュール サービスの検証を開始します。

(3) 負荷分散を装う

1. まず、複数のサービスを有効にするように注文モジュールを設定します

2. 注: 複数の起動のポート番号を同じにすることはできません。

3. テスト

(4) タイムアウト設定

1. ローカル構成のタイムアウト

2. グローバル構成のタイムアウト

(5) Nacosドメインモデル部門

1. 名前空間の分割

2. グループ分け

(6) ログの設定

1. ローカルログの設定

2. グローバルログ設定

よくあるエラー


注: 仮想マシンがオンになっている限り、ファイアウォールはオフにする必要があります。

1. マイクロサービスを理解する

インターネット業界の発展に伴い、サービスに対する要件はますます高くなり、サービス アーキテクチャは単一のアーキテクチャから現在一般的なマイクロサービス アーキテクチャに徐々に進化しています。これらのアーキテクチャの違いは何ですか?

1.0. 学習目標

マイクロサービス アーキテクチャの長所と短所を理解する

1.1. モノリシックアーキテクチャ

モノリシック アーキテクチャ: ビジネスのすべての機能が 1 つのプロジェクトで開発され、展開用に 1 つのパッケージにパッケージ化されます。

モノリシック アーキテクチャの長所と短所は次のとおりです。

アドバンテージ:

  • シンプルな構造

  • 導入コストが低い

欠点:

  • 高度な結合 (維持とアップグレードが困難)

1.2. 分散アーキテクチャ

分散アーキテクチャ: システムはビジネス機能に応じて分割され、各ビジネス機能モジュールはサービスと呼ばれる独立したプロジェクトとして開発されます。

分散アーキテクチャの長所と短所:

アドバンテージ:

  • サービス結合を減らす

  • サービスのアップグレードと拡張に貢献

欠点:

  • サービスコールの関係が複雑

分散アーキテクチャによりサービスの結合は軽減されますが、サービスを分割する際には考慮すべき問題がまだ多くあります。

  • サービス分割の粒度を定義するにはどうすればよいですか?

  • サービス間で通話するにはどうすればよいですか?

  • サービス呼び出し関係を管理するにはどうすればよいですか?

人々は分散アーキテクチャを制約するための一連の効果的な標準を開発する必要があります。

1.3. マイクロサービス

マイクロサービス: 適切に設計された分散アーキテクチャ ソリューション

システムは業務機能ごとに分割されており、各業務機能モジュールはサービスと呼ばれる独立したプロジェクトとして開発されます。

プロジェクト内の各モジュールはサービスと呼ばれます

SpringCloud は現在中国で最も広く使用されているマイクロサービス フレームワークです

SpringCloud-Alibaba は、Nacos と呼ばれるレジストリ コンポーネントもリリースしました。

マイクロサービスのアーキテクチャ上の特徴:

  • 単一の責任: マイクロサービス分割の粒度は小さく、各サービスは固有のビジネス機能に対応し、単一の責任を達成するために、各サービスは 1 つのことだけを実行します。

  • 自律性: 独立したチーム、独立したテクノロジー、独立したデータベース、独立した展開と配信

  • サービス指向: サービスは、言語やテクノロジーに依存しない、統一された標準インターフェイスを提供します。

  • 強力な分離: サービス コールは分離され、耐障害性があり、連鎖的な問題を回避するために機能が低下します。

マイクロサービスの上記の特性は、実際に分散アーキテクチャの標準を設定し、サービス間の結合をさらに軽減し、サービスの独立性と柔軟性を提供します。高い凝集性と低い結合性を実現します。

したがって、マイクロサービスは、適切に設計されたアーキテクチャを備えた分散アーキテクチャ ソリューションと考えることができます

しかし、計画はどのように実行されるべきでしょうか? どのテクノロジースタックを選択すればよいでしょうか? 世界中のインターネット企業は、独自のマイクロサービス実装ソリューションを積極的に試しています。

中でもJava分野で最も注目を集めているのがSpring Cloudが提供するソリューションだ。

1.4.スプリングクラウド

SpringCloud は現在、中国で最も広く使用されているマイクロサービス フレームワークです。公式ウェブサイトのアドレス: Spring Cloud

Spring Cloud は、さまざまなマイクロサービス機能コンポーネントを統合し、SpringBoot に基づいてこれらのコンポーネントの自動アセンブリを実現するため、優れたすぐに使用できるエクスペリエンスを提供します。

共通のコンポーネントには次のものがあります。

また、SpringCloudの最下層はSpringBootに依存しており、以下のようなバージョン互換関係があります。公式サイトのバージョン説明

1.5 ナコス登録センター

Nacos: サービス登録センター、プロジェクトの各モジュール モジュール起動サービスは Nacos Web サイトに登録されます

プロジェクト内の各ビジネス機能モジュールはサービスと呼ばれる独立したプロジェクトとして開発され、Nacos 登録センターの Web サイトに登録されます。  

国内企業は一般に登録センターなどアリババの技術を尊重しており、Spring Cloud アリババも Nacos と呼ばれる登録センターを立ち上げた。

Nacos は、クラウドネイティブ アプリケーションを簡単に構築できる、動的なサービス検出、構成管理、およびサービス管理プラットフォームです。これは SpringCloud Alibaba のコンポーネントの 1 つであり、サービス登録の検出とサービスの構成を担当し、nacos=eureka+config と見なすことができます。

1.6. 概要

  • モノリシック アーキテクチャ: シンプルで便利、高度に結合されているが拡張性が低く、小規模プロジェクトに適しています。例: 学生管理システム

  • 分散アーキテクチャ: 疎結合でスケーラブルですが、複雑で困難です。JD.com や Taobao などの大規模なインターネット プロジェクトに適しています

  • マイクロサービス: 優れた分散アーキテクチャ ソリューション

    ①メリット:分割粒度が小さく、サービスの独立性が高く、結合度が低い

    ②デメリット:構造が非常に複雑で、運用保守、監視、導入の難易度が高くなる

  • SpringCloud は、さまざまな優れたマイクロサービス機能コンポーネントを統合した、マイクロサービス アーキテクチャのワンストップ ソリューションです

  • Nacos: Service Registry、SpringCloudAlibaba によって開始されたマイクロサービス機能コンポーネント。

2.Nacos基本利用インストール導入+サービス登録

(1) Linux インストール パッケージの単一ノードのインストールと展開

公式クイック スタート チュートリアル 接続アドレス
Nacos は、スタンドアロン、クラスター、マルチクラスターの 3 つの展開モードをサポートしています。Nacos は Java 環境に依存しており、JDK1.8 以降の使用が必要であることに注意してください。
Nacos をインストールするには 2 つの方法があります。1 つはソース コードのインストール、もう 1 つはコンパイルされたインストール パッケージを直接使用する方法です。ここでは、インストールパッケージを使用してインストールすることを選択します。

1.JDKのインストール設定

Linux で JDK をインストールして構成するには、次の手順が必要です。
JDK と JRE がシステムにインストールされているかどうかを確認します。次のコマンドで確認できます。

java -version

JDK と JRE がシステムにインストールされていない場合は、JDK をダウンロードしてインストールする必要があります。
チュートリアルのダウンロード: Linux のインストールと構成 jdk11_jdk-11.0.12_linux-x64_bin.tar.gz_Half Poetry-- のブログ-CSDN ブログ

JDK が正常にインストールされ、構成されていることを確認します。次のコマンドが使用できます。

java -version

このコマンドを実行すると、インストールされている JDK のバージョン情報が表示されるはずです。

2.nacosのインストール

  1. nacos の GitHub アドレスをダウンロードする

​​​​ここに画像の説明を挿入

2. Nacos インストール パッケージを解凍します。 

tar -zxvf nacos-server-2.2.2.tar.gz  -C /opt/enviroment/

解凍が完了すると、解凍されたディレクトリに nacos フォルダーが表示されます。

3. ファイアウォールをオフにする

火災状況の表示

systemctl ステータス ファイアウォール 

ファイアウォールをオフにします。

systemctl ファイアウォールを停止します

4. Nacos サービスを開始し
 、nacos と入力し、次のコマンドを実行します。

[root@bogon nacos]# sh bin/startup.sh -m standalone
/java/jdk-11.0.16//bin/java   -Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -Dnacos.member.list= -Xlog:gc*:file=/nacos/nacos/logs/nacos_gc.log:time,tags:filecount=10,filesize=102400 -Dloader.path=/nacos/nacos/plugins/health,/nacos/nacos/plugins/cmdb,/nacos/nacos/plugins/selector -Dnacos.home=/nacos/nacos -jar /nacos/nacos/target/nacos-server.jar  --spring.config.additional-location=file:/nacos/nacos/conf/ --logging.config=/nacos/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
nacos is starting with standalone
nacos is starting,you can check the /nacos/nacos/logs/start.out

これにより、Nacosサービスが開始されます。

5. Nacos サービスにアクセスする

以下の名前を付けて実行します

[root@localhost nacos]# cat /opt/enviroment/nacos/logs/start.out


Nacos のデフォルトのアクセス アドレスは http://localhost:8848/nacos です。仮想マシンによってデプロイされた Nacos サービスが使用される場合、アクセス アドレスは仮想マシンの IP アドレスです: http://192.168.100.129:8848 /nacos/index.html


このアドレスをブラウザに入力すると、Nacos サービスにアクセスできます。すべてが正常であれば、Nacos ログイン インターフェイスが表示され、デフォルトのアカウント (nacos) とパスワード (nacos) を入力してログインします。

 この時点で、Linux 環境での Nacos サービスのインストールと展開は完了です。Nacos の使用と構成について詳しく知りたい場合は、Nacos の公式ドキュメント (https://nacos.io/zh-cn/docs/what-is-nacos.html) を参照してください。
ここに画像の説明を挿入
ここに画像の説明を挿入

(2) Linux ソース コード モードでの単一ノードのインストールとデプロイメント

1. Nacos ソースコードをダウンロードして解凍する、別の方法

省略可能です。次の手順に進みます。

公式 Web サイト https://github.com/alibaba/nacos/releases からソース コードをダウンロードし、.tar.gz または .zip 形式のファイルを選択して、インストールするディレクトリに解凍します。

wget https://github.com/alibaba/nacos/releases/download/2.2.2/nacos-server-2.2.2.tar.gz
tar -zxvf nacos.tar.gz

2.Nacosの設定

最初の手順は省略でき、上記の手順に従って、上記で解凍した nacos ファイルを直接使用できます。

解凍された nacos ディレクトリに入り、conf/application.properties ファイルを変更します。

# 启用standalone模式
nacos.standalone=true
# 修改端口号
server.port=8848
# 修改数据存储位置
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.216.176:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456

注意要修改以下参数:
server.port: 使用するポート番号に変更します。デフォルトは 8848
db.url.0: MySQL データベースの接続アドレスに変更します。IP アドレスは現在のネットワーク属性の IPv4 アドレスです。別のネットワークに接続すると変更されます。使用されているため、忘れずに変更してください

db.user、db.password: 正しいデータベースのユーザー名とパスワードを設定します。

3. データベースとデータテーブルの作成

MySQL クライアントを使用して nacos データベースとデータ テーブルを作成する

仮想マシンで /opt/enviroment/nacos/conf フォルダーを見つけます。

MySQL クライアントに移動して、mysql-schema.sql ファイルを実行します。

 

作成は次のように行われます。

 

4. ナコスを開始する

解凍した nacos フォルダーに入り、次のコマンドを使用して Nacos サービスを開始します。

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

起動に成功すると、

http://仮想マシンのIPアドレス: 8848/nacos

http://192.168.100.129:8848/nacos/

Nacos コンソールを表示するには。

これまでのところ、Nacos は正常にインストールされています。

(3) 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>spring-Cloud</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>User-module</module>
        <module>common</module>
    </modules>


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

    <!--springboot依赖版本是2.6。11-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.11</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencyManagement>
        <dependencies>
            <!--Cloud依赖 版本2021.0.4-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2021.0.4</version>
 <!--type和scope是代表子模块可以继承cloud这个版本,子模块要是下载关于cloud的依赖,就默认使用这个版本了-->
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--阿里巴巴依赖 版本2021.0.4.0-->
            <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>spring-Cloud</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.common.yka</groupId>
    <artifactId>common</artifactId>

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

    <dependencies>

        <!--web场景开发启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--druid依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.15</version>
        </dependency>

        <!--mybatis依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>

        <!-- 数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.27</version>
        </dependency>

        <!-- mybatis-plus启动器-->
        <!-- mybatis-plus 是自己开发,并非官方的! -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

    </dependencies>

</project>

3. ユーザーモジュールを作成する

ステップ:
1 モジュールを作成する

 2. 依存関係をインポートする

<?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>spring-Cloud</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.user.yka</groupId>
    <artifactId>User-module</artifactId>

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

    <dependencies>

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

        <!--引用公共common的pom.xml依赖-->
        <dependency>
            <groupId>org.common.yka</groupId>
            <artifactId>common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

    </dependencies>


</project>

パブリック pom.xml 構成ファイルを引用すると、pom ファイルの依存関係を直接使用できます。

3. SpringBoot メインクラスの作成

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

4. 設定ファイルの追加

spring:
  application:
    name: user-server #服务名称
  # 配置数据源
  datasource:
    druid:
      url: jdbc:mysql://localhost:3306/nacos?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: 123456

5. 必要なインターフェースと実装クラスを作成します(コントローラーサービスdao)

@RestController
@RequestMapping("/user")
public class UserController {

    @GetMapping("/test")
    public String test(){
        return "aaaaaa";
    }
}

4. ユーザーモジュールをnacosにマイクロサービスとして登録する

次に、User-module モジュールのコードの変更を開始し、nacos サービスに登録します。

1. User-module モジュールの 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. nacos サービスのアドレスを application.yml に追加します。 

spring:
  application:
    name: user-server #服务名称
  # 配置数据源
  datasource:
    druid:
      url: jdbc:mysql://localhost:3306/nacos?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: 123456
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.100.129:8848 #虚拟机ip地址和端口号

4. サービスを開始し、nacos コントロール パネルに商品マイクロサービスが登録されているかどうかを確認します。これは成功を意味します。
ここに画像の説明を挿入

注: 仮想マシンがオンになっている限り、ファイアウォールはオフにする必要があります。

起動に失敗してエラーが報告される場合、考えられる問題は次のとおりです。ファイアウォールが閉じられておらず、ファイアウォールを閉じた後に Nacos サービスを開いています。

火災状況の表示

systemctl ステータス ファイアウォール

画像

ファイアウォールをオフにします。

systemctl ファイアウォールを停止します

次に、Nacos サービスを開始します

(4) ログインの問題を解決する

これまでの設定でWebページは権限認証をスキップし、ログインせずに入れるようになりました。nacosのWebページにログインできるように問題を解決してみましょう。

/nacos/conf/application.properties 構成ファイルを変更します。

  1. ログイン認証関数 nacos.core.auth.enabled=true を開始し、 true に変更します。

  2. クライアントとサーバーが対話するときに暗号化に使用されるキー。これにより、認証プロセス中の情報漏洩を防ぐことができます。nacos.core.auth.server.identity.key=例 nacos.core.auth.server.identity.value=割り当ての例

  3. トークン認証のキーを設定します: nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789

  4. Nacos は SpringBoot を統合してサービスの登録と検出を実現しますが、サービスの登録を操作するには yml ファイルにユーザー名とパスワードを追加する必要があります。

    cloud:
      nacos:
        discovery:
          username: nacos #nacos网址的账号密码
          password: nacos

このとき、sh shutdown.sh はサービスを閉じ、サービスを再起動し、nacos ページに入ってログインします。

 

3. Feign はサービス間のリモート呼び出し + ロードバランシング + ドメインモデル分割を実装します

簡単に言うと、プロジェクト内のモジュールは相互に呼び出し可能です。

(1) フェイクとは

Feign は Spring Cloud によって提供される宣言型擬似 Http クライアントです。これを使用すると、ローカル サービスを呼び出すのと同じくらい簡単にリモート サービスを呼び出すことができます。インターフェースを作成してアノテーションを追加するだけで済みます。Nacos は Feign との互換性が高く、Feign はデフォルトでリボンを統合するため、Nacos で Fegin を使用するとデフォルトで 負荷

(2) フェーンの使用

1. Fegin の依存関係を追加する

 <dependencies>
        <!--nacos客户端-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--引用公共common的pom.xml依赖-->
        <dependency>
            <groupId>org.common.yka</groupId>
            <artifactId>common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--负载均衡依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        <!--加入Fegin的依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>

2. ユーザーモジュール起動クラスに Fegin アノテーションを追加する

@SpringBootApplication
@EnableDiscoveryClient//@EnableDiscoveryClient是一个Spring Cloud中的注解,用于启用服务发现功能(nacos)。
@EnableFeignClients//开启Fegin
public class UserModuleApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserModuleApplication.class, args);
    }
}

3. order-module モジュールを作成する

<?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>spring-Cloud</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.order.yka</groupId>
    <artifactId>Order-module</artifactId>
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <dependencies>
        <!--引用公共模块common依赖-->
        <dependency>
            <groupId>org.common.yka</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>
spring:
  application:
    name: order-server #服务名称
  # 配置数据源
  datasource:
    druid:
      url: jdbc:mysql://localhost:3306/nacos?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: 123456
   #clout配置nacos服务注册中心
  cloud:
    nacos:
      discovery: #配置客户端
        server-addr: 192.168.100.129:8848 #虚拟机ip地址和端口号
        username: nacos #nacos网址的账号密码
        password: nacos
server:
  port: ${random.int[0000,9999]} #随机生成端口号
@RestController
@RequestMapping("/order")
public class OrderController {
    @GetMapping("/test")
    public Integer test(){
        return 1111;
    }
}

4. feign インターフェイスを作成し、Fegin を使用して注文モジュールのデータを呼び出すマイクロサービスを実装します。

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

5. コントローラーは feign を呼び出し、ユーザー モジュール サービスの検証を開始します。

これは、ユーザーがクライアント、注文がサーバーであることに相当し、ユーザー サービスはリクエストを注文サービスに送信します。

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private OrderFeign orderFeign;
    @GetMapping("/test")
    public Integer test(){
        return orderFeign.getOrderNum();
    }
}

(3) 負荷分散を装う

Nacos で Fegin を使用すると、デフォルトで負荷分散の効果が得られます。以下は理解を示すためのものです。

負荷分散は、分散システム アーキテクチャにおける重要なメカニズムの 1 つです。主な機能は、スループットを最大化したり、応答時間を最小限に抑えたりするために、タスクまたはリクエストを複数のサーバーに分散することです。

たとえば、2 台のコンピュータがそれぞれ注文サービス モジュールのメッセージ データを変更する場合、ユーザー サービス モジュールが注文サービスを呼び出すとき、注文サービスを 2 回呼び出した結果は異なります。

たとえば、ユーザーが初めて注文をリクエストしたとき、注文ステータスは配送中ですが、バックグラウンド スタッフが注文を出荷済みに変更し、その後ユーザーがページを再度更新するようリクエストすると、注文ステータスが変更されていることがわかります。 2 つの結果は異なります。ロード バランシングと呼ばれます。

1. まず、複数のサービスを有効にするように注文モジュールを設定します

オーダーモジュールのスタートアップクラスで複数回起動可能

2. 注: 複数の起動のポート番号を同じにすることはできません。

次に、注文モジュールのポート番号をランダムに設定します。

server:
  port: ${random.int[0000,9999]} #随机生成端口号

3. テスト

オーダーモジュールのコントローラー戻り値を 333 に変更した後、オーダーモジュールを一度起動すると、起動後にポート番号がランダムに生成されます

最初は戻り値が1111で、それぞれ2つのサービスを開いているのでポート番号が不一致です

@RestController
@RequestMapping("/order")
public class OrderController {
    @GetMapping("/test")
    public Integer test(){
        return 3333;
    }
}

Web サイトにアクセスすると、更新されるたびに異なるデータが表示されます

これが負荷分散です

(4) タイムアウト設定

1. ローカル構成のタイムアウト

feign:
  client:
    config:
      order-server:
        connectTimeout: 3000
        readTimeout: 3000
#        loggerLevel: debug

2. グローバル構成のタイムアウト

(1) 方法1

 @Bean
    public Request.Options options(){
        return new Request.Options(5000,5000);
    }

パラメータ (5000,5000) はリクエストのタイムアウト期間を示します。つまり、5000 ミリ秒 (5 秒) 以内に応答が受信されない場合、リクエストはタイムアウトしてキャンセルされます。
最初のパラメータはリクエストの接続タイムアウト時間を表し、
2 番目のパラメータはリクエストの読み取りタイムアウト時間を表します
(2) モード 2

feign:
  client:
    config:
      default:
        #建立连接所用的时间,适用于网络状况正常的情况下,两端连接所需要的时间
        ConnectTimeOut: 5000
        #指建立连接后从服务端读取到可用资源所用的时间
        ReadTimeOut: 5000

(5) Nacosドメインモデル部門

(2)Feignの利用をベースに実施

ここに画像の説明を挿入ここに画像の説明を挿入

1. 名前空間の分割

NameSpace: デフォルトの NameSpace はパブリックであり、NameSpace はリソースの分離を実行できます。

たとえば、開発環境の NameSpace 下のサービスは、本番環境の NameSpace 下のマイクロサービスを呼び出すことはできません。

その機能は、複数のサービス モジュールが名前空間にない場合、それらをリモートから呼び出すことができないことです。

(1) ネームスペースを作成する

(2) マイクロサービスの名前空間を構成する

spring:
  application:
    name: user-server
  #clout配置nacos服务注册中心
  cloud:
    nacos:
      discovery: #配置客户端
        server-addr: 192.168.100.129:8848 #虚拟机ip地址和端口号
        username: nacos #nacos网址的账号密码
        password: nacos
        #命名空间划分
        #把user服务模块设置为开发空间,它的作用是如果多个服务模块不在一个命名空间里,是不可以远程调用的
        namespace: fe4f886f-792a-4566-aff7-8ac8852e1aa9 #设置命名空间,value是dev开发的命名空间的id

ユーザー マイクロサービスは開発開発名前空間に設定されます

順序はデフォルトのパブリック名前空間にあります

名前空間分割がなくなる前

分割後は、注文データをリモートから呼び出すことができなくなります。

2. グループ分け

group :デフォルトのグループ名は DEFAULT_GROUP でこのグループはリソースの分離に使用できます。

たとえば、ユーザーは group1 グループに属しており、注文サービスは DEFAULT_GROUP グループに属しているため、ユーザー サービスは注文サービスのデータを呼び出すことができません。

その機能は、複数のサービス モジュールがグループ内にない場合、それらをリモートから呼び出すことができないことです。

(1)、マイクロサービスのグループ化を構成します

spring:
  application:
    name: user-server
   #clout配置nacos服务注册中心
  cloud:
    nacos:
      discovery: #配置客户端
        server-addr: 192.168.100.129:8848 #虚拟机ip地址和端口号
        username: nacos #nacos网址的账号密码
        password: nacos
        #分组划分
        group: group1 #把user服务分组为group1

ユーザー サービスはグループ グループ内にあり、注文サービスはデフォルトの DEFAULT_GROUP グループ内にあり、グループ内にない場合はリモートから呼び出す方法はありません。

グループ分けがなくなる前に

分割後は、注文データをリモートから呼び出すことができなくなります。

(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);
}

方法2

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. 起動に失敗してエラーが報告される場合、考えられる問題は次のとおりです。ファイアウォールが閉じられておらず、ファイアウォールを閉じた後に Nacos サービスを開いています。

火災状況の表示

systemctl ステータス ファイアウォール

画像

ファイアウォールをオフにします。

systemctl ファイアウォールを停止します

次に、Nacos サービスを開始します

2. 起動に成功した場合、nacos サービス登録センター Web サイトにデータと登録情報が存在しないことがわかります。マシンのネットワークが変更された可能性があります。

conf/application.properties ファイル内の IP アドレスは現在のネットワーク属性の IPv4 アドレスであるため、ネットワークが変更された場合は、IP アドレスを変更する必要があります。

# 启用standalone模式
nacos.standalone=true
# 修改端口号
server.port=8848
# 修改数据存储位置
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.216.176:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456

注意要修改以下参数:server.port: 使用するポート番号に変更 db.url.0: MySQL データベースの接続アドレスに変更 IP アドレスは現在のネットワーク属性の IPv4 アドレスです ネットワークを変更すると変更されます忘れずに変更してください

db.user、db.password: 正しいデータベースのユーザー名とパスワードを設定します。

3. java.util.concurrent.TimeoutException: Linux 担当者は nacos を開始していません。開始する前にファイアウォールをオフにすることを忘れないでください。

4. org.springframework.beans.factory.BeanCreationException: @Value が正常に挿入されませんでした。タイプミスがないか注意深く確認してください。

おすすめ

転載: blog.csdn.net/m0_65992672/article/details/130690827