天天看点

spring cloud 入门1. 什么是Spring Cloud2. Spring Cloud 常见模块3.spring cloud版本4. Eureka 入门

1. 什么是Spring Cloud

  • Spring Cloud 是一系列框架的集合
  • 利用Spring Boot的简化了开发

2. Spring Cloud 常见模块

  • Eureka:注册中心,用于注册所有服务(项目/应用)
  • Ribbon:负载均衡,用于搭建集群的。(同一个功能多个tomcat,ribbon帮着选择一个tomcat)
  • zuul 网关:确定统一入口,方便进行管理。
  • Feign:服务与服务之间调用。类似HttpClient
  • Hystrix:熔断器,与正主断了联系,使用备胎。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-278YyL2P-1575617437358)(img/1575593571923.png)]

3.spring cloud版本

  • spring cloud 采用 Greenwich版本,对应spring boot 2.1.*版本

4. Eureka 入门

4.1 认识

  • Eureka职责:
    • 服务注册:服务提供方将服务注册到注册中心
    • 服务发现:服务调用方法,从注册中心中,获得需要的服务
    • 服务检测:注册中心与服务之间采用心跳检测服务状态

4.2 Eureka 入门案例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4sUzQpOh-1575617437361)(img/1575601504822.png)]

4.2.1 搭建父项目

  • 步骤一:创建项目 cloud_parent(略)
  • 步骤二:修改pom.xml文件,确定spring cloud版本
<!--1 确定spring boot的版本-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
    </parent>

    <!--2  确定版本-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <spring-cloud-release.version>Greenwich.RELEASE</spring-cloud-release.version>
    </properties>

    <!-- 3 锁定sprig cloud版本-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud-release.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!-- 4 确定spring cloud私有仓库-->
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

           

4.2.2 搭建注册中心

  • 步骤0:创建项目 eureka_demo (略)
  • 步骤一:修改pom.xml文件,添加web和 eureka service 依赖
<dependencies>
        <!--web起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Eureka服务端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
           
  • 步骤二:创建yml文件,配置端口号、服务名、eureka注册地址
#服务端口号
server:
  port: 10086
#服务名称
spring:
  application:
    name: eureka_demo2
#注册中心地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:${server.port}/eureka   #eureka服务注册地址
    register-with-eureka: false     #关闭将自己注册到注册中心中
    fetch-registry: false           #关闭从注册中心获得列表(不拉去其他服务信息)
           
  • 步骤三:创建启动类,添加开启 eureka service 注解 @EnableEurekaService
package com.czxy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**
 * Created by liangtong.
 */
@SpringBootApplication
@EnableEurekaServer     //开启eureka服务端
public class EurekaDemo2Application {
    public static void main(String[] args) {
        SpringApplication.run(EurekaDemo2Application.class ,args);
    }
}

           

4.2.3 搭建服务提供方

  • 步骤0:创建提供方项目,eureka_service
  • 步骤一:修改pom.xml文件,添加eureka client依赖
<dependencies>
        <!--web起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Eureka客户端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--spring boot监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>
           
  • 步骤二:创建application.yml文件,配置端口号、服务名、eureka注册中心位置
#端口号
server:
  port: 8080
#服务名称
spring:
  application:
    name: service2
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka

           
  • 步骤三:编写启动类,添加启动客户端注解 @EnableEurekaClient
package com.czxy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

/**
 * Created by liangtong.
 */
@SpringBootApplication
@EnableEurekaClient
public class Service2Application {
    public static void main(String[] args) {
        SpringApplication.run(Service2Application.class,args);
    }
}

           
  • 步骤四:测试程序
    • 测试路径:http://localhost:8080/test
package com.czxy.controller;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by liangtong.
 */
@RestController
@RequestMapping("/test")
public class TestController {
    @GetMapping
    public ResponseEntity<String> test(){
        return ResponseEntity.ok("测试数据");
    }
}

           

4.2.4 搭建 服务调用方

  • 步骤0:创建调用方项目,eureka_client
  • 步骤一:修改pom.xml文件,添加 web、eureka client、spring boot 监控依赖(与eureka_service项目一样)
<dependencies>
        <!--web起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Eureka客户端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--spring boot监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>
           
  • 步骤二:创建yml文件,(与eureka_service项目相似,有不同端口和服务名)
#端口号
server:
  port: 9090
#服务名称
spring:
  application:
    name: client2
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka

           
  • 步骤三:启动类,添加eureka客户端注解,(与eureka_service项目相似,有不同类名)
package com.czxy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

/**
 * Created by liangtong.
 */
@SpringBootApplication
@EnableEurekaClient     //开启eureka客户端
public class Client2Application {
    public static void main(String[] args) {
        SpringApplication.run(Client2Application.class,args);
    }
}

           

4.2.5 调用方测试数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XzGz4YkU-1575617437363)(img/1575601488624.png)]

  • 步骤一:编写config配置类,用于配置RestTemplate实例
    package com.czxy.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.stereotype.Component;
    import org.springframework.web.client.RestTemplate;
    
    /**
     * Created by liangtong.
     */
    @Configuration
    public class HttpConfig {
        @Bean
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }
    
               
  • 步骤二:编写DataDao,用于进行远程调用
package com.czxy.dao;

import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

/**
 * Created by liangtong.
 */
@Component
public class DataDao {
    @Resource
    private RestTemplate restTemplate;

    public ResponseEntity<String> data(){
        return restTemplate.getForEntity("http://localhost:8080/test",String.class);
    }
}

           
  • 步骤三:编写DataController,提供接口进行访问
package com.czxy.controller;

import com.czxy.dao.DataDao;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * Created by liangtong.
 */
@RestController
@RequestMapping("/data")
public class DataController {
    @Resource
    private DataDao dataDao;
    @GetMapping
    public ResponseEntity data(){
        return dataDao.data();
    }
}

           
  • 测试路径
http://localhost:9090/data
           

4.3 配置eureka instance

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vlHuwh8n-1575617437363)(img/1575603867581.png)]

  • yml文件配置
    • instance-id : 用于配置可视化页面中,显示的服务名称
      • 默认服务名称:计算机名称:服务名:端口号
      • 自定义服务名称:
        • ${spring.application.name} 获得服务名
        • ${spring.cloud.client.ip-address} 获得ip地址
        • ${server.port} 获得端口号
    • prefer-ip-address:用于配置可视化页面中,访问时是否显示ip地址
      • 默认显示的是:计算机名称:端口号/
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka
  instance:
    instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
    prefer-ip-address: true   #注册中心可视化中显示IP地址

           
  • properties文件配置(不建议),参考学习
eureka.client.service-url.defaultZone=http://localhost:10086/eureka
eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
eureka.instance.prefer-ip-address=true