0
点赞
收藏
分享

微信扫一扫

IDEA之搭建SpringCloud项目

目录

一、简介

SpringCloud是基于SpringBoot的一整套实现微服务的框架。他提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。
在这里插入图片描述

1.1 Spring-Cloud Euraka介绍

Spring-Cloud Euraka是Spring Cloud集合中一个组件,它是对Euraka的集成,用于服务注册发现。Eureka是Netflix中的一个开源框架。

1.2 Euraka介绍

Eureka由多个instance(服务实例)组成,这些服务实例可以分为两种:Eureka ServerEureka Client。为了便于理解,我们将Eureka client再分为Service Provider和Service Consumer。

  • Eureka Server 提供服务注册和发现
  • Service Provider 服务提供方,将自身服务注册到Eureka,从而使服务消费方能够找到
  • Service Consumer服务消费方,从Eureka获取注册服务列表,从而能够消费服务

二、部署Eureka Server

2.1 创建项目

以下操作基于idea 2020.1.2版本

  1. 选择Spring Initializr
    在这里插入图片描述
    在这里插入图片描述
  2. 选择Eureka Server
    在这里插入图片描述

2.2 配置文件

这里我用的.yml格式的配置文件

server:
  port: 8086

eureka:
  instance:
    hostname: localhost
  client:
    fetch-registry: false
    register-with-eureka: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:8086/eureka/

2.3 启动类

对启动类添加注解**@EnableEurekaServer**,将该服务标识为Eureka Server

@SpringBootApplication
@EnableEurekaServer
public class DemoApplication {

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

}

2.4 测试

访问localhost:8086
在这里插入图片描述

三、部署Eureka Client

1、Eureka Client包括两个服务模块:Service Provider(服务提供方)和Service Consumer(服务消费方)。
2、Eureka Client和Eureka Server目录类似, 不同点在于:

  • 启动类,使用@EnableDiscoveryClient 标识该服务为Euraka Client
  • 配置文件,需要指定Euraka Server地址和当前服务注册时的名称。

3.1 部署Service Provider

3.1.1 创建项目

创建方法与Eureka Server一致。

3.1.2 配置文件

这里用的application.yml

server:
  port: 8082

spring:
  application:
    name: service-provider1

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8086/eureka

参数说明:

  • eureka.client.serviceUrl.defaultZone:指定Eureka Server的地址
  • spring.application.name:当前服务注册在Eureka Server的名称。

3.1.3 启动类

使用@EnalbeDiscoveryClinet标识当前服务为Euraka Client。

@SpringBootApplication
@EnableDiscoveryClient
public class DemoApplication {

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

}

3.1.4 请求接口

@RestController
public class TestController {

    @RequestMapping(value = "/sayHi")
    public void sayHi(){
        System.out.println("Hello,this is the provider 1");
    }
}

3.1.5 测试

打开服务注册中心,能看到新注册得服务名称
在这里插入图片描述

3.2 部署Servcie Customer

3.2.1 创建项目

创建方法与Eureka Server一致。

3.2.2 配置文件

这里用的application.yml

server:
  port: 8081

spring:
  application:
    name: service-customer1

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8086/eureka

3.2.3 启动类

使用@EnalbeDiscoveryClinet标识当前服务为Euraka Client。

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class DemoApplication {

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

}

3.2.4 请求接口

从Euraka Server中获取服务提供方的服务地址信息

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
public class ClientControlelr {

    @Autowired
    private DiscoveryClient discoveryClient;

    @RequestMapping("/queryService")
    @ResponseBody
    public String query() {
        List<ServiceInstance> instances =discoveryClient.getInstances("service-provider1");
        StringBuilder urls= new StringBuilder();
        for(ServiceInstance instance : instances){
            urls.append(instance.getHost()+":"+instance.getPort()).append(",");
        }
        return urls.toString();
    }
}

3.2.5 测试

在这里插入图片描述

3.2.6 补充

四、自我保护机制

Eureka Server出现以下提示

这是Eureka 提供的一个特性,在默认的情况下是打开的。当Eureka Server在一定时间内没有接收到某个微服务实例心跳,Eureka Server将会注销该实例(默认90秒

4.1 Eureka Server端属性

# 设为false,关闭自我保护。默认是打开的。
eureka.server.enable-self-preservation=false
# 清理实例失效间隔(单位毫秒,默认是60*1000)
eureka.server.eviction-interval-timer-in-ms=4000

注意:

4.2 Eureka Client端属性

# 开启健康检查,默认是开启的
eureka.client.healthcheck.enabled=true
# 单位是秒,默认30秒。此客户端发送心跳的频率
eureka.instance.lease-renewal-interval-in-seconds=30
# 单位是秒,默认90秒,表示eureka server在收到此client上次心跳之后,间隔多久没有收到,就摘除此服务。
eureka.instance.lease-expiration-duration-in-seconds=10
举报

相关推荐

0 条评论