• 十、一文搞定spring cloud重要成员-- Eureka(注册中心)


    一、服务端Server搭建

    1. 依赖引入

        <parent>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter-parent</artifactId>
               <version>2.2.2.RELEASE</version>
               <relativePath/> <!-- lookup parent from repository -->
           </parent><groupId>com.kinglead</groupId>
           <artifactId>maven-spring-cloud-eureka-server</artifactId>
           <version>0.0.1-SNAPSHOT</version>
           <name>maven-spring-cloud-eureka-server</name>
           <description>Demo project for Spring Boot</description><properties>
               <java.version>1.8</java.version>
               <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
           </properties><dependencies>
               <dependency>
                   <groupId>org.springframework.cloud</groupId>
                   <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
               </dependency><dependency>
                   <groupId>org.springframework.boot</groupId>
                   <artifactId>spring-boot-starter-test</artifactId>
                   <scope>test</scope>
                   <exclusions>
                       <exclusion>
                           <groupId>org.junit.vintage</groupId>
                           <artifactId>junit-vintage-engine</artifactId>
                       </exclusion>
                   </exclusions>
               </dependency>
           </dependencies><dependencyManagement>
               <dependencies>
                   <dependency>
                       <groupId>org.springframework.cloud</groupId>
                       <artifactId>spring-cloud-dependencies</artifactId>
                       <version>${spring-cloud.version}</version>
                       <type>pom</type>
                       <scope>import</scope>
                   </dependency>
               </dependencies>
           </dependencyManagement><build>
               <plugins>
                   <plugin>
                       <groupId>org.springframework.boot</groupId>
                       <artifactId>spring-boot-maven-plugin</artifactId>
                   </plugin>
               </plugins>
           </build>
    2. 添加配置

      application.yml

      server:
         port: 8080
       eureka:
         instance:
           hostname: localhost #标识正运行在哪台服务器上
         client:
           #register-with-eureka、fetch-registry:是否与Eureka服务进行交互,即是否集群
           register-with-eureka: false
           fetch-registry: false
           #设置与Eureka注册中心交互的地址,查询服务和注册服务用到
           service-url:
             defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #单机
             # defaultZone: http://eureka9001.kinglead.com:9001/eureka/,http://eureka9002.kinglead.com:9002/eureka/ # 集群
    3. 修改启动类

       @SpringBootApplication
       @EnableEurekaServer //标识为Eureka服务端
       public class EurekaServerApplication {
          public static void main(String[] args) {
             SpringApplication.run(EurekaServerApplication.class, args);
          }
       ​
       }
    4. 访问管理页面

      http://localhost:8080

      image-20201118181911712

    二、注册服务(客户端Client搭建)

    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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>
          <parent>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-parent</artifactId>
             <version>2.2.2.RELEASE</version>
             <relativePath/> <!-- lookup parent from repository -->
          </parent>
          <groupId>com.kinglead</groupId>
          <artifactId>maven-spring-cloud-eureka-client</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <name>maven-spring-cloud-eureka-client</name>
          <description>Demo project for Spring Boot</description><properties>
             <java.version>1.8</java.version>
             <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
          </properties><dependencies>
             <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</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-test</artifactId>
                <scope>test</scope>
                <exclusions>
                   <exclusion>
                      <groupId>org.junit.vintage</groupId>
                      <artifactId>junit-vintage-engine</artifactId>
                   </exclusion>
                </exclusions>
             </dependency>
          </dependencies><dependencyManagement>
             <dependencies>
                <dependency>
                   <groupId>org.springframework.cloud</groupId>
                   <artifactId>spring-cloud-dependencies</artifactId>
                   <version>${spring-cloud.version}</version>
                   <type>pom</type>
                   <scope>import</scope>
                </dependency>
             </dependencies>
          </dependencyManagement><build>
             <plugins>
                <plugin>
                   <groupId>org.springframework.boot</groupId>
                   <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
             </plugins>
          </build></project>
    2. 添加配置

      application.yml

       spring:
         application:
           name: user-service #服务名
       server:
         port: 9200
       eureka:
         client:
           service-url:
             defaultZone: http://localhost:9000/eureka/  #Eureka服务端地址。配置多个地址,使用逗号进行分割,它将会一个一个进行尝试注册
    3. 修改启动类

      @SpringBootApplication
       @EnableEurekaClient //标记为Eureka客户端
       public class EurekaClientApplication {
       ​
          public static void main(String[] args) {
             SpringApplication.run(EurekaClientApplication.class, args);
          }
       ​
       }
    4. 启动服务,看Eureka服务端是否注

     

    三、消费服务

    Spring cloud有两种服务调用方式:1、restTemplate+ribbon(cloud的负载均衡组件);2、feign(cloud的httpclient组件,默认集成ribbo)

    方式一、restTemplate+ribbon

    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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>
          <parent>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-parent</artifactId>
             <version>2.2.2.RELEASE</version>
             <relativePath/> <!-- lookup parent from repository -->
          </parent>
          <groupId>com.kinglead</groupId>
          <artifactId>maven-spring-cloud-eureka-client</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <name>maven-spring-cloud-eureka-client</name>
          <description>Demo project for Spring Boot</description><properties>
             <java.version>1.8</java.version>
             <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
          </properties><dependencies>
             <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</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-test</artifactId>
                <scope>test</scope>
                <exclusions>
                   <exclusion>
                      <groupId>org.junit.vintage</groupId>
                      <artifactId>junit-vintage-engine</artifactId>
                   </exclusion>
                </exclusions>
             </dependency>
          </dependencies><dependencyManagement>
             <dependencies>
                <dependency>
                   <groupId>org.springframework.cloud</groupId>
                   <artifactId>spring-cloud-dependencies</artifactId>
                   <version>${spring-cloud.version}</version>
                   <type>pom</type>
                   <scope>import</scope>
                </dependency>
             </dependencies>
          </dependencyManagement><build>
             <plugins>
                <plugin>
                   <groupId>org.springframework.boot</groupId>
                   <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
             </plugins>
          </build></project>
    2. 配置文件

      application.yml

       spring:
         application:
           name: service-rest #服务名
       server:
         port: 8001
       eureka:
         client:
           service-url:
             defaultZone: http://localhost:9000/eureka/  #Eureka服务端地址。配置多个地址,使用逗号进行分割,它将会一个一个进行尝试注册
    3. 修改启动类 

      @SpringBootApplication
       @EnableEurekaClient
       public class ConsumerRibboApplication {
       ​
          public static void main(String[] args) {
             SpringApplication.run(ConsumerRibboApplication.class, args);
          }
       ​
          //向程序的ioc注入一个bean: restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。
          @Bean
          @LoadBalanced
          RestTemplate restTemplate() {
             return new RestTemplate();
          }
          
       }
    4. 创建controller

      @RestController
       public class HelloController {
       ​
           @Resource
           HelloService helloService;
       ​
           @RequestMapping("/hello")
           public String hello(){
               return helloService.helloService();
           }
       ​
       }
    5. 创建service

      @Service
       public class HelloService {
       ​
           @Resource
           RestTemplate restTemplate;
       ​
           public String helloService(){
               return restTemplate.getForObject("http://user-service/hello",String.class);
           }
       ​
       }
    6. 访问接口

      http://localhost:8001/hello

    方式二、feign

    Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。简而言之:Feign 采用的是基于接口的注解;Feign 整合了ribbon

    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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>
          <parent>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-parent</artifactId>
             <version>2.2.2.RELEASE</version>
             <relativePath/> <!-- lookup parent from repository -->
          </parent>
          <groupId>com.kinglead</groupId>
          <artifactId>maven-spring-cloud-eureka-comsumer-ribbo</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <name>maven-spring-cloud-eureka-comsumer-ribbo</name>
          <description>Demo project for Spring Boot</description><properties>
             <java.version>1.8</java.version>
             <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
          </properties><dependencies>
             <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
               </dependency>
             <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</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-test</artifactId>
                <scope>test</scope>
                <exclusions>
                   <exclusion>
                      <groupId>org.junit.vintage</groupId>
                      <artifactId>junit-vintage-engine</artifactId>
                   </exclusion>
                </exclusions>
             </dependency>
          </dependencies><dependencyManagement>
             <dependencies>
                <dependency>
                   <groupId>org.springframework.cloud</groupId>
                   <artifactId>spring-cloud-dependencies</artifactId>
                   <version>${spring-cloud.version}</version>
                   <type>pom</type>
                   <scope>import</scope>
                </dependency>
             </dependencies>
          </dependencyManagement><build>
             <plugins>
                <plugin>
                   <groupId>org.springframework.boot</groupId>
                   <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
             </plugins>
          </build></project>
    2. 配置文件

       spring:
         application:
           name: service-feign
       server:
         port: 8001
       eureka:
         client:
           serviceUrl:
             defaultZone: http://localhost:9000/eureka/
    3. 修改启动类

       @SpringBootApplication
       @EnableEurekaClient  //标识Eureka客户端
       @EnableFeignClients  //开启feign
       public class ConsumerFeignApplication {
       ​
          public static void main(String[] args) {
             SpringApplication.run(ConsumerFeignApplication.class, args);
          }
       ​
       }
    4. 创建controller

      @RestController
       public class HelloController {
       ​
           @Resource
           HelloAction helloAction;
       ​
           @RequestMapping(value = "/hello", method = RequestMethod.GET)
           public String hello(){
               return helloAction.hello();
           }
       ​
       }
    5. 创建接口(action)

      @FeignClient(value = "user-service")
       public interface HelloAction {
       ​
           @RequestMapping(value = "/hello",method = RequestMethod.GET)
           String hello();
       ​
       }
    6. 访问

      http://localhost:8001/hello

      源码地址:https://github.com/kinglead2012/myblog

  • 相关阅读:
    第二周
    第一周
    构建之法阅读笔记之三
    冲刺一(10)
    冲刺一(9)
    用户模板和用户场景
    冲刺一(8)
    第10周总结
    冲刺一(7)
    冲刺一(6)
  • 原文地址:https://www.cnblogs.com/kinglead/p/14025199.html
Copyright © 2020-2023  润新知