Spring-cloud-eureka-consul-zookeeper登録センター入門事例

147270 ワード

親プロジェクト
このケースは、親プロジェクトが依存バージョン管理のみを管理する大きなプロジェクトの下にあるいくつかのモジュールです.
親プロジェクトpomファイル
注意pom方式でパッケージ化
<groupId>ganxie.xiaowen.cloudgroupId>
    <artifactId>springcloudartifactId>
    <version>1.0-SNAPSHOTversion>
    <packaging>pompackaging>

    <modules>
        <module>cloud-provider-payment8001module>
        <module>cloud-consumer-order80module>
        <module>cloud-api-commonsmodule>
        <module>cloud-eureka-server7001module>
        <module>cloud-eureka-server7002module>
        <module>cloud-provider-payment8002module>
    modules>
    
    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <maven.compiler.source>1.8maven.compiler.source>
        <maven.compiler.target>1.8maven.compiler.target>
        <junit.version>4.12junit.version>
        <log4j.version>1.2.17log4j.version>
        <lombok.version>1.16.18lombok.version>
        <mysql.version>8.0.17mysql.version>
        <druid.version>1.1.16druid.version>
        <mybatis.spring.boot.version>1.3.0mybatis.spring.boot.version>
    properties>

    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-project-info-reports-pluginartifactId>
                <version>3.0.0version>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-bootartifactId>
                <version>2.2.2.RELEASEversion>
                <type>pomtype>
                <scope>importscope>
            dependency>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>Hoxton.SR1version>
                <type>pomtype>
                <scope>importscope>
            dependency>
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-alibaba-dependenciesartifactId>
                <version>2.1.0.RELEASEversion>
                <type>pomtype>
                <scope>importscope>
            dependency>
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
                <version>${mysql.version}version>
                <scope>runtimescope>
            dependency>
            <dependency>
                <groupId>com.alibabagroupId>
                <artifactId>druidartifactId>
                <version>${druid.version}version>
            dependency>
            <dependency>
                <groupId>org.mybatis.spring.bootgroupId>
                <artifactId>mybatis-spring-boot-starterartifactId>
                <version>${mybatis.spring.boot.version}version>
            dependency>
            <dependency>
                <groupId>junitgroupId>
                <artifactId>junitartifactId>
                <version>${junit.version}version>
            dependency>
            <dependency>
                <groupId>log4jgroupId>
                <artifactId>log4jartifactId>
                <version>${log4j.version}version>
            dependency>
        dependencies>
    dependencyManagement>

概要
エントリーケースは4つのモジュールに分けられ、Eureka登録センター、サービスプロバイダ、サービス消費者、公共資源モジュールであり、登録センターはそれぞれ70017002ポートを使用してクラスタをシミュレートし、サービスプロバイダは8001802ポートを使用してクラスタをシミュレートする.
パブリックリソースモジュール
サービスプロバイダとサービス消費者の同じエンティティクラスを独立したモジュールに提案し,pom依存をそれぞれ導入すればよい.
pom
<dependencies>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <scope>runtimescope>
            <optional>trueoptional>
        dependency>

        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>cn.hutoolgroupId>
            <artifactId>hutool-allartifactId>
            <version>5.1.0version>
        dependency>
    dependencies>

エンティティークラス
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult<T> {
     

    private Integer code;
    private String message;
    private T data;

    public CommonResult(Integer code, String message) {
     
        this.code = code;
        this.message = message;
    }
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment implements Serializable {
     

    private Long id;
    private String serial;

}

EurekaServer 7001(登録センター)
hostsファイルの変更
     
127.0.0.1 eureka7001
127.0.0.1 eureka7002

pom
  <dependencies>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
        dependency>

        
        <dependency>
            <groupId>ganxie.xiaowen.cloudgroupId>
            <artifactId>cloud-api-commonsartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>

        
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <scope>runtimescope>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
        dependency>
    dependencies>

プロファイル(自己保護メカニズムを閉じることを含む)
server:
  port: 7001

eureka:
  instance:
    hostname: eureka7001  #eureka        
  client:
    register-with-eureka: false    #            
    fetch-registry: false   #          ,         ,         
    service-url:
      #   eureka server                       
      defaultZone: http://eureka7002:7002/eureka/
  #server:
    #        
    #enable-self-preservation: false
    #eviction-interval-timer-in-ms: 2000

プライマリ起動クラス
@SpringBootApplication
@EnableEurekaServer
public class Eureka7001 {
     
    public static void main(String[] args) {
     
        SpringApplication.run(Eureka7001.class,args);
    }
}

EurekaServer 7002(登録センター)
プロファイル(自己保護メカニズムを閉じることを含む)
server:
  port: 7002

eureka:
  instance:
    hostname: eureka7002  #eureka        
  client:
    register-with-eureka: false    #            
    fetch-registry: false   #          ,         ,         
    service-url:
      #   eureka server                       
      defaultZone: http://eureka7001:7001/eureka/
  #server:
    #        
    #enable-self-preservation: false
    #eviction-interval-timer-in-ms: 2000

その他同上
EurekaClient 8001(サービスプロバイダ)
pom
<dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>
        <dependency>
            <groupId>org.mybatis.spring.bootgroupId>
            <artifactId>mybatis-spring-boot-starterartifactId>
        dependency>
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druid-spring-boot-starterartifactId>
            <version>1.1.10version>
        dependency>
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-jdbcartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <scope>runtimescope>
            <optional>trueoptional>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <version>1.18.12version>
        dependency>
        <dependency>
            <groupId>ganxie.xiaowen.cloudgroupId>
            <artifactId>cloud-api-commonsartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
        dependency>
    dependencies>

プロファイル(自己保護メカニズムを閉じることを含む)
server:
  port: 8001

spring:
  application:
    name: cloud-provider-payment #        
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///cloud2020?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&userSSL=false
    username: root
    password: 1234

mybatis:
  type-aliases-package: ganxie.xiaowen.entity
  mapper-locations: classpath:mybatis/mapper/*.xml


eureka:
  client:
    #        EurekaServer,   true
    register-with-eureka: true
    #   EurekaServer         ,   true。      ,       true    ribbon      
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7001:7001/eureka/,http://eureka7002:7002/eureka/
  instance:
    instance-id: cloud-provider-payment8001
    prefer-ip-address: true
    #Eureka                (     )
    #lease-renewal-interval-in-seconds: 1
    #Eureka                   ,    (      ),       
    #lease-expiration-duration-in-seconds: 2

プライマリ起動クラス
注意ここの注記は@EnableEurekaClient
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class Payment8001 {
     
    public static void main(String[] args) {
     
        SpringApplication.run(Payment8001.class,args);
    }
}

サービス(DiscoveryClientを含む)
daoレイヤとserviceレイヤは通常のチェックアップ操作にすぎず、DiscoveryClientを使用するにはメイン起動クラスで@EnableDiscoveryClientを構成する必要があります.
@RestController
@Slf4j
public class PaymentController {
     

    @Resource
    private PaymentService paymentService;

    @Resource
    private DiscoveryClient discoveryClient;

    @Value("${server.port}")
    private String serverPort;

    @PostMapping("/payment")
    public CommonResult create(@RequestBody Payment payment){
     
        int result = paymentService.create(payment);
        log.info("******    :"+result);
        if (result>0) {
     
            return new CommonResult(200,"       ,serverPort="+serverPort,result);
        }
        return new CommonResult(444,"       ",null);
    }

    @GetMapping("/payment/{id}")
    public CommonResult selectById(@PathVariable("id") Long id){
     
        Payment payment = paymentService.selectPaymentById(id);
        log.info("******    :"+payment);
        if (payment != null) {
     
            return new CommonResult(200,"    ,serverPort="+serverPort,payment);
        }
        return new CommonResult(444,"      ",null);
    }

    @GetMapping("/payment/discovery")
    public Object discoveryClient(){
     
        List<String> services = discoveryClient.getServices();
        for (String service : services) {
     
            log.info("*********service:"+service);
        }
        List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PROVIDER-PAYMENT");
        for (ServiceInstance instance : instances) {
     
            log.info(instance.getServiceId()+"\t"+
                    instance.getHost()+"\t"+
                    instance.getPort()+"\t"+
                    instance.getUri());
        }
        return discoveryClient;
    }
}

EurekaClient 8002(サービスプロバイダ)
コンフィギュレーションファイルのポートが8002の場合を除き、完全に上
EurekaClient 80(サービス消費者)
pom
<dependencies>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <scope>runtimescope>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>

        <dependency>
            <groupId>ganxie.xiaowen.cloudgroupId>
            <artifactId>cloud-api-commonsartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
        dependency>
    dependencies>

プロファイル
server:
  port: 80
spring:
  application:
    name: cloud-order-service

eureka:
  client:
    #        EurekaServer,   true,      
    register-with-eureka: true
    #   EurekaServer         ,   true。      ,       true    ribbon      
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7001:7001/eureka/,http://eureka7002:7002/eureka/

プライマリ起動クラス
@SpringBootApplication
@EnableEurekaClient
public class Order80 {
     
    public static void main(String[] args) {
     
        SpringApplication.run(Order80.class,args);
    }
}

サービス(ribbonによる負荷分散)
容器にRestTemplate@LoadBalancedを注入してrestTemplate負荷等化の能力を与える必要があります.デフォルトのアルゴリズムはポーリングアルゴリズムで、カスタマイズすることもできます.インタフェースはIruleです.
@Configuration
public class ApplicationContextConfig {
     

    @Bean
    @LoadBalanced //  restTemplate       
    public RestTemplate myRestTemplate(){
     
        return new RestTemplate();
    }
}
@RestController
@Slf4j
public class OrderController {
     

//    private static final String PAYMENT_URL = "http://localhost:8001";
    private static final String PAYMENT_URL = "http://cloud-provider-payment";//      spring.application.name

    @Resource
    private RestTemplate restTemplate;

    @GetMapping("/consumer/payment/create")
    public CommonResult<Payment> create(Payment payment){
     
        return restTemplate.postForObject(PAYMENT_URL+"/payment",payment, CommonResult.class);
    }

    @GetMapping("consumer/payment/{id}")
    public CommonResult<Payment> selectPaymentById(@PathVariable("id") Long id){
     
        return restTemplate.getForObject(PAYMENT_URL+"/payment/"+id,CommonResult.class);
    }
}

Zookeeper 8004(サービスプロバイダ)
pom
<dependencies>

        <dependency>
            <groupId>ganxie.xiaowen.cloudgroupId>
            <artifactId>cloud-api-commonsartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>


        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-zookeeper-discoveryartifactId>
            
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeepergroupId>
                    <artifactId>zookeeperartifactId>
                exclusion>
            exclusions>
        dependency>
        
        
        <dependency>
            <groupId>org.apache.zookeepergroupId>
            <artifactId>zookeeperartifactId>
            <version>3.4.14version>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <scope>runtimescope>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>


    dependencies>

プロファイル
server:
  port: 8004
spring:
  application:
    name: cloud-provider-payment #        
  cloud:
    zookeeper:
      connect-string: 192.168.188.172:2181

プライマリ起動クラス
@SpringBootApplication
@EnableDiscoveryClient //        consul  zookeeper           
public class Payment8004 {
     

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

Zookeeper 80(サービス消費者)
pom
 <dependencies>

        <dependency>
            <groupId>ganxie.xiaowen.cloudgroupId>
            <artifactId>cloud-api-commonsartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>


        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-zookeeper-discoveryartifactId>
            
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeepergroupId>
                    <artifactId>zookeeperartifactId>
                exclusion>
            exclusions>
        dependency>
        
        
        <dependency>
            <groupId>org.apache.zookeepergroupId>
            <artifactId>zookeeperartifactId>
            <version>3.4.14version>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <scope>runtimescope>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>


    dependencies>

プロファイル
server:
  port: 80
spring:
  application:
    name: cloud-consumer-order #        
  cloud:
    zookeeper:
      connect-string: 192.168.188.172:2181

プライマリ起動クラス
@SpringBootApplication
@EnableDiscoveryClient
public class ZkOrder80 {
     
    public static void main(String[] args) {
     
        SpringApplication.run(ZkOrder80.class,args);
    }
}


consul 8006(サービスプロバイダ)
pom
<dependencies>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-consul-discoveryartifactId>
        dependency>

        <dependency>
            <groupId>ganxie.xiaowen.cloudgroupId>
            <artifactId>cloud-api-commonsartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>


        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <scope>runtimescope>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>



    dependencies>

プロファイル
server:
  port: 8006
spring:
  application:
    name: cloud-provider-payment #        
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${
     spring.application.name}

プライマリ起動クラス
@SpringBootApplication
@EnableDiscoveryClient
public class Payment8006 {
     
    public static void main(String[] args) {
     
        SpringApplication.run(Payment8006.class,args);
    }
}

consul 80(サービス消費者)
pom
 <dependencies>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-consul-discoveryartifactId>
        dependency>

        <dependency>
            <groupId>ganxie.xiaowen.cloudgroupId>
            <artifactId>cloud-api-commonsartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>


        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <scope>runtimescope>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>



    dependencies>

プロファイル
server:
  port: 80
spring:
  application:
    name: cloud-consumer-order #        
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${
     spring.application.name}

プライマリ起動クラス
@SpringBootApplication
@EnableDiscoveryClient
public class Consul80 {
     
    public static void main(String[] args) {
     
        SpringApplication.run(Consul80.class,args);
    }
}