SpringCloud学习笔记一:服务注册与发现

一、Eureka简介

Eureka是Netflix开发的一款基于REST风格的服务治理框架。在微服务架构中,它主要负责完成服务注册与发现。Eureka包括了Eureka Server和Eureka Client两个组件,Eureka Server作为服务注册中心,用来维护服务实例,而Eureka Client则负责将服务注册到Eureka Server,并能够从Eureka Server获取其他服务的信息。

Spring Cloud将Eureka集成在其子项目spring-cloud-netflix中,使得Spring Cloud应用能够方便地使用Eureka实现服务发现与治理。

二、父项目建立

1.新建一个项目SpringCloudTest ,只留下pom.xml文件
2.在pow文件添加spring依赖以及指定子模块版本,内容如下:
复制代码
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.shadowcoder</groupId>
    <artifactId>SpringCloudTest</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>eureka-server</module>
        <module>eureka-client</module>
    </modules>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.2.RELEASE</version>
    </parent>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!--        指定spring-cloud版本-->
        <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
    </properties>


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <!--        引用指定的spring-cloud版本-->
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

三、服务注册中心Eureka Server

1.添加一个子模块eureka-server,指定其Parent为我们刚刚所创的父项目SpringCloudTest
2.在pow文件中添加eureka-server依赖,内容如下:
复制代码
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.shadowcoder</groupId>
        <artifactId>SpringCloudTest</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>eureka-client</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

</project>
3.写入eureka-server的配置文件application.properties,内容如下
复制代码
#指定启动端口号
server.port=5200

#是否将自己注册到Eureka Server,默认为true,由于当前就是server,故而设置成false,表明该服务不会向eureka注册自己的信息
eureka.client.register-with-eureka=false

#是否从eureka server获取注册信息,由于单节点,不需要同步其他节点数据,用false
eureka.client.fetch-registry=false

#设置服务注册中心的URL,用于client和server端交流
eureka.client.service-url.defaultZone=http://localhost:5200/eureka/

#指定服务名称
spring.application.name=eureka-server

#关闭自我保护
eureka.server.enable-self-preservation=false
4..添加子模块eureka-server的启动类EurekaServerApplication并启动它,内容如下:
复制代码
package com.shadowcoder;

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

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

}
5.访问http://localhost:5200,出现下面的页面则为成功。

四、添加一个服务Eureka Client

1.添加一个子模块eureka-client,同样指定其Parent为我们刚刚所创的父项目SpringCloudTest
2.在pow文件中添加eureka-client以及spring-boot-starter-web依赖,内容如下:
复制代码
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.shadowcoder</groupId>
        <artifactId>SpringCloudTest</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>eureka-client</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </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>
    </dependencies>

</project>
3.写入eureka-client的配置文件application.properties,内容如下
复制代码
#指定启动端口号
server.port=5201

#设置服务注册中心的URL,用于client和server端交流
eureka.client.service-url.defaultZone=http://localhost:5200/eureka/

#指定服务名称
spring.application.name=eureka-client
4..添加子模块eureka-client的启动类EurekaClientApplication并启动它,内容如下:
复制代码
package com.shadowcoder;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableEurekaClient
public class EurekaClientApplication {

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

}
5.访问http://localhost:5200,页面出现EUREKA-CLIENT服务则为成功。

备注(提示):

Eureka常见错误:

1.EurekaHttpClient : Request execution error导致No instances available

原因:未关闭自我注册eureka会默认将自己本身注册至注册中心

2.进入自我保护模式

当你看到如下的话时,证明Eureka进入了自我保护模式,原因:Eureka可能会声明已经不存在的实例。刷新数小于阈值时,为了安全起见不会剔除过期实例。

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.server.enable-self-preservation=false
相关推荐
mldong5 小时前
引擎从不发一条消息:jeeflow 的两类扩展点与消息模块的分工
java·架构
君顾16 小时前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
zhanghe6877 小时前
es的密码带有特殊字符,导出
java
pnoker7 小时前
IoT DC3 概念解读:把设备抽象成一套语义模板——位号、指令、事件与面向智能体的设备建模
java·人工智能·物联网·iot·dc3
my_realmy7 小时前
Java SE 基础学习笔记(一):面向对象、继承多态、抽象接口与异常(JDK 8)
java·多线程·并发··生产者消费者模式
天远数科7 小时前
风险治理实战:基于天远车信盟出险构建自动化理赔核保流水线
java·网络·人工智能·自动化
骇客野人8 小时前
SpringBoot电商系统用户注册、登录、留存及数据埋点设计与落地实施方案
java·spring boot·后端
qiuhaipeng18 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库
wxwx_bscxy3229 小时前
基于Python新冠疫情可视化分析系统的设计与实现
java·数据库·spring boot·python·微信小程序·sqlite
evans在进步10 小时前
Tomcat NIO 工作原理详解:从 Acceptor、Poller 到容器处理链
java·tomcat·nio