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
相关推荐
翊谦3 小时前
Java Agent开发 Milvus 向量数据库安装
java·数据库·milvus
晓晓hh3 小时前
JavaSE学习——迭代器
java·开发语言·学习
查古穆3 小时前
栈-有效的括号
java·数据结构·算法
Java面试题总结3 小时前
Spring - Bean 生命周期
java·spring·rpc
硅基诗人4 小时前
每日一道面试题 10:synchronized 与 ReentrantLock 的核心区别及生产环境如何选型?
java
014-code4 小时前
String.intern() 到底干了什么
java·开发语言·面试
摇滚侠4 小时前
JAVA 项目教程《苍穹外卖-12》,微信小程序项目,前后端分离,从开发到部署
java·开发语言·vue.js·node.js
楚国的小隐士4 小时前
为什么说Rust是对自闭症谱系人士友好的编程语言?
java·rust·编程·对比·自闭症·自闭症谱系障碍·神经多样性
春花秋月夏海冬雪5 小时前
代码随想录刷题 - 贪心Part1
java·算法·贪心·代码随想录
野生技术架构师5 小时前
2026年牛客网最新Java面试题总结
java·开发语言