垃圾站 VPS技术 IDEA之搭建SpringCloud项目详细方法教程

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 补充

如果Service Customer只是从Eureka Server中获取注册服务的地址信息,可以不用注册到Eureka Server中,如果本身也是一个Service Porvider,那么此时就需要注册服务了。

四、自我保护机制

Eureka Server出现以下提示

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

这是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

注意:

服务端的“eureka.server.eviction-interval-timer-in-ms” 值 要比 客户端配置 “lease-expiration-duration-in-seconds ”的时间短。

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
上一篇
下一篇
联系我们

联系我们

返回顶部