SpringBoot + Dubboはマイクロサービスを構築します

インターネットの発展に伴い、ウェブサイトアプリケーションの規模は拡大を続けており、従来の垂直アプリケーションアーキテクチャでは対応できなくなっています。分散サービスアーキテクチャとモバイルコンピューティングアーキテクチャが不可欠であり、アーキテクチャの秩序ある進化を確実にするためのガバナンスシステムが緊急に必要とされています。

まず、写真に来てください

ダボといえば、誰もが知っていると思います!アリババ社がオープンソース化した高性能で優れたサービスフレームワークにより、アプリケーションは高性能RPCを介してサービスの出力および入力機能を実装でき、Springフレームワークとシームレスに統合できます。

 

 

ダボアーキテクチャ図

ノードの役割の説明:

  • プロバイダー:サービスを公開するサービスプロバイダー
  • コンシューマー:リモートサービスを呼び出すサービスコンシューマー
  • レジストリ:サービスの登録と検出のためのレジストリ
  • モニター:サービスコールの数とコール時間をカウントするモニタリングセンター
  • コンテナ:サービス実行コンテナ

二、アイデアの実現

今日、私たちはユーザーのプロセスを使用して注文する製品を選択し、それをユーザーセンター、製品センター、注文センターの3つのビジネスサービスに分割します。Springboot+ Dubboを使用して小さなデモを実装します!

サービスの相互作用プロセスは次のとおりです。

この記事では、主にSpringbootとDubboのフレームワークの統合と開発の実践について紹介します。実際のビジネスサービスの分割は非常に複雑なプロセスであり、紹介したプロセスよりもはるかに複雑です。上記の3つのサービスはプロジェクトのデモンストレーション用です。 、なぜこのように分割したいのか、あまり絡まないでください

さて、あまりナンセンスな話をしないで、それを開いてみましょう!

  • 1.仮想マシンで4centos7を作成し、いずれか1つを選択してzookeeperをインストールします
  • 2.マイクロサービスプロジェクトを構築し、コードを記述します
  • 3.centos7にマイクロサービスをデプロイします
  • 4.リモートサービスコールテスト

3、飼育係の設置

在使用 Dubbo 之前,我们需要一个注册中心,目前 Dubbo 可以选择的注册中心有 zookeeper、Nacos 等,一般建议使用 zookeeper!

まず、Zookeeperをインストールする前に、JDKをインストールして構成する必要があります。このマシンはOracle Java8SEを使用します。

  • JDKをインストールします(すでにインストールされている場合は無視できます)
yum -y install java-1.8.0-openjdk
  • javaインストールを表示
java -version

 

  • JDKのインストールが完了したら、Zookeeperをダウンロードしてインストールします
#创建一个zookeeper文件夹
cd /usr
mkdir zookeeper

#下载zookeeper-3.4.14版本
wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

#解压
tar -zxvf zookeeper-3.4.14.tar.gz

データとログディレクトリを作成する

#创建数据和日志存放目录
cd /usr/zookeeper/
mkdir data
mkdir log

#把conf下的zoo_sample.cfg备份一份,然后重命名为zoo.cfg
cd conf/
cp zoo_sample.cfg zoo.cfg

動物園の飼育係を構成する

#编辑zoo.cfg文件
vim zoo.cfg

  • Zookeeperを起動します
#进入Zookeeper的bin目录
cd zookeeper/zookeeper-3.4.14/bin

#启动Zookeeper
./zkServer.sh start

#查询Zookeeper状态
./zkServer.sh status

#关闭Zookeeper状态
./zkServer.sh stop

次のメッセージが表示され、正常に起動したことを示します。

4.プロジェクトの紹介

  • スプリングブートバージョン:2.1.1.RELEASE
  • 動物園飼育係のバージョン:3.4.14
  • ダボバージョン:2.7.3
  • mybtais-plusバージョン:3.0.6
  • データベース:mysql-8
  • ビルドツール:maven
  • サービスモジュール:ユーザーセンター、製品センター、注文センター

5、コードの練習

5.1、データベースを初期化します

まず、mysqlクライアント上に3つのデータベース、つまりdianshang-user、、、dianshang-platform作成しますdianshang-business

  • dianshang-userデータベースで、ユーザーテーブルtb_userを作成し、データを初期化します

  • dianshang-platformデータベースで、製品テーブルtb_productを作成し、データを初期化します

  • dianshang-platformデータベースで、注文テーブルtb_orderと注文詳細テーブルtb_order_detailを作成します

5.2、プロジェクトを作成する

データベーステーブルの設計が完了した後、中IDEAの名前を作成するプロジェクト。dianshangSpringboot

最終的なカタログは次のとおりです。

ディレクトリ構造の説明:

  • dianshang-common:主にいくつかのパブリックツールライブラリを格納し、すべてのサービスを使用できます
  • dianshang-business:注文センター。apiモジュールは主にダボサービス公開インターフェイスを提供しproviderモジュールはspringbootサービス処理操作を提供するプロジェクトです。
  • dianshang-user:apiモジュールとproviderモジュールの設計が類似しているユーザーセンター
  • dianshang-platform:apiモジュールとproviderモジュールの設計が類似している商品センター

pomファイルにクライアント追加するdubbozookeeper、すべての依存プロジェクトを使用できます。

<!-- lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.4</version>
    <scope>provided</scope>
</dependency>

<!-- Dubbo Spring Boot Starter -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.3</version>
</dependency>
<!-- 因为使用的是 zookeeper 作为注册中心,所以要添加 zookeeper 依赖 -->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.13</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!--使用curator 作为zookeeper客户端-->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>4.2.0</version>
</dependency>
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>4.2.0</version>
</dependency>

注意:環境を設定したときにピットが見つかりました。プロジェクトのzookeeperバージョンはサーバーバージョンによって異なります。可能な限り一貫している必要があります。たとえば、この例のzookeeperサーバーのバージョンです3.4.14。したがって、zookeeperファイルライブラリに依存する場合、それも保持するようにしてください。一貫して、3.5.xバージョンzookeeper依存している場合、プロジェクトの開始時にすべての種類のモンスターとゴーストがエラーを報告します!

5.3、ユーザーセンタープロジェクトを作成する

IDEAで、dianshang-userサブモジュールを作成し、モジュールに依存しdianshang-commonます

<dependencies>
    <dependency>
        <groupId>org.project.demo</groupId>
        <artifactId>dianshang-common</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

同時に、作成dianshang-user-providerしてdianshang-user-apiモジュール化します。

  • dianshang-user-api:主に他のサービスへのインターフェイスの公開を提供します
  • dianshang-user-provider:Webプロジェクトに似ており、主に基本的なビジネスを担当しcruddianshang-user-apiモジュールに依存しています

5.3.1、dubboサービスを構成する

設定サービスをして、ファイルを次のようにdianshang-user-providerapplication.ymldubbo

#用户中心服务端口
server:
  port: 8080
#数据源配置
spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: "jdbc:mysql://localhost:3306/dianshang-user"
      username: root
      password: 111111
#dubbo配置
dubbo:
  scan:
    # 包名根据自己的实际情况写
    base-packages: org.project.dianshang.user
  protocol:
    port: 20880
    name: dubbo
  registry:
    #zookeeper注册中心地址
    address: zookeeper://192.168.0.107:2181

5.3.2、サービス公開インターフェイスと実装クラスを作成する

ではdianshang-user-apiモジュール、作成UserApiインタフェースをし、パラメータオブジェクトを返しますUserVo

public interface UserApi {

    /**
     * 查询用户信息
     * @param userId
     * @return
     */
    UserVo findUserById(String userId);
}

その中でUserVo、次のようにシリアル化が必要です。

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class UserVo implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 用户ID
     */
    private String userId;

    /**
     * 用户中文名
     */
    private String userName;
}

dianshang-user-providerモジュール、書き込みUserApi次のようにインタフェースの実装クラス:

@Service(interfaceClass =UserApi.class)
@Component
public class UserProvider implements UserApi {

    @Autowired
    private UserService userService;

    @Override
    public UserVo findUserById(String userId) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
        queryWrapper.eq("user_id",userId);
        User source = userService.getOne(queryWrapper);
        if(source != null){
            UserVo vo = new UserVo();
            BeanUtils.copyProperties(source,vo);
            return vo;
        }
        return null;
    }
}

 

つづく。

おすすめ

転載: blog.csdn.net/suifeng629/article/details/107134562