springcloudノートのサービスプロバイダーとコンシューマー

1. SpringCloudとは何ですか?

springbootに基づくマイクロサービスエコシステム。springcloudでは、すべてのサービスがモジュール化されているため、開発者は、構成管理、サービスの登録と検出、ヒューズメカニズム、インテリジェントルーティング、グローバルロック、分散タスク、クラスター構築などの分散システムを迅速に構築できます。 。

SpringCloudが解決する主な問題は4つあります。

  1. クライアントはどのようにサービスにアクセスしますか
  2. サービスとサービスを接続する方法
  3. サービスの登録と管理
  4. サービスがクラッシュしました。対処方法

次に、これら4つの問題に対応する解決策があり、3つの主要な解決策があります。

  • SpringCloudNetflixはワンストップソリューションを提供します
  • ダボ、サービスコミュニケーションに焦点を当て、動物園の飼育係はサービスの登録と発見を提供します
  • springcloudAlibabaもワンストップソリューションを提供します。それはゆっくりと始まり、将来的にはより多くの企業がそれを使用するでしょう。

なじみのないように聞こえるかもしれませんが、それは問題ではありません。これらを明確にするために一連の記事を書きます。

したがって、今日の説明は主に単純なマイクロサービスを構築する方法についてです。サービスの利用者とサービスの登録者がいます。

次に、手順を使用します

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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.lhh</groupId>
    <artifactId>springcloud</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        
    </modules>
	
	<!-- 父工程改为pom -->
    <packaging>pom</packaging>

    <properties>
        <junit.version>4.12</junit.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- springcloud -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR8</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- springboot -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.3.6.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- mysql -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.22</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.22</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.1.4</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.16</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.12</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

springcloud-apiモジュールの作成springcloud-api
ここに画像の説明を挿入します
モジュールのインポート依存関係

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

2.springcloud-provider-emp-8001

構造
ここに画像の説明を挿入します
pom.xml

 <!--引入实体类模块-->
        <dependency>
            <groupId>com.lhh</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

application.yaml構成ファイル

server:
  port: 8001
mybatis:
  type-aliases-package: com.lhh.entity
  mapper-locations: classpath:mappers/*.xml
  configuration:
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    spring:
  application:
    name: springcloud-provider-emp
  datasource:
    driver-class-name: com.cj.mysql.jdbc.Driver
    #    url: jdbc:mysql://localhost:3306/db01
    url: jdbc:mysql://localhost:3306/springcloud?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
    username: root
    #    password: root
    password: 123456
    #数据源类别
    type: com.alibaba.druid.pool.DruidDataSource

Empmapper.xmlマッピングファイル

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lhh.springcloudprovideremp8001.dao.EmpMapper">
    <select id="queryById" parameterType="Integer" resultType="Emp">
        select *
        from t_emp
        where emp_id = #{empId}
    </select>

    <select id="selectAllEmps" resultType="Emp">
        select *
        from t_emp
    </select>
</mapper>

クラスを開始

package com.lhh.springcloudprovideremp8001;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.lhh.springcloudprovideremp8001.dao")
public class SpringcloudProviderEmp8001Application {
    
    

    public static void main(String[] args) {
    
    

        SpringApplication.run(SpringcloudProviderEmp8001Application.class, args);
    }

}

2.springcloud-consumer-emp-8001

ここに画像の説明を挿入します

 <!-- 引入实体类+web -->
        <dependency>
            <groupId>com.lhh</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

yaml設定ファイル

server:
  port: 80

コンシューマーコントローラー

package com.lhh.springcloudconsumer.controller;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.List;

@RestController
@RequestMapping("/consumer")
public class EmpConsumerController {
    
    
    //提供者的ip+端口
    private static final String REST_URL_PREFIX = "http://localhost:8001";

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/get/{empId}")
    public com.lhh.entity.Emp get(@PathVariable("empId") Integer empId) {
    
    
        return restTemplate.getForObject(REST_URL_PREFIX + "/provider/queryOne/" + empId, com.lhh.entity.Emp.class);
    }

    @GetMapping("/getAll")
    public List<com.lhh.entity.Emp> get() {
    
    
        return restTemplate.getForObject(REST_URL_PREFIX + "/provider/queryAll/", List.class);
    }
}

消費者スタートアップクラス

package com.lhh.springcloudconsumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringcloudConsumerApplication {
    
    

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

総括する

おめでとうございます、私は少し知っています!
あなたが知っているほど、あなたは知らないのです!
〜読んでくれてありがとう、あなたの注意とコメント、それは私の研究のための最大のサポートです、さあ、見知らぬ人、一緒に一生懸命働いてください。

おすすめ

転載: blog.csdn.net/qq_41486775/article/details/114326160