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
相关推荐
吴声子夜歌1 小时前
Java——线程的基本协作机制
java·线程协作
谙弆悕博士1 小时前
【附C++源码】从零开始实现 2048 游戏
java·c++·游戏·源码·项目实战·2048
独自归家的兔2 小时前
OCPP 1.6 协议详解:GetLocalListVersion 获取本地列表版本指令
java·后端·物联网·spring·ocpp1.6
Apache RocketMQ3 小时前
RocketMQ源码解析——秒级定时消息介绍
java·云原生·消息队列·rocketmq·java-rocketmq
xiaoming00183 小时前
JAVA项目打包部署运维全流程(多服务、批量)
java·linux·运维
拾-光4 小时前
【Git】命令大全:从入门到高手,100 个最常用命令速查(2026 版)
java·大数据·人工智能·git·python·elasticsearch·设计模式
无人不xiao4 小时前
springBoot 实现 接口进度条
java·spring boot·后端
pkowner4 小时前
若依分页问题及解决方法
java·前端·算法
largecode5 小时前
如何让电话显示店名?来电显示店铺名称,提升有效接通率
java·开发语言·spring·百度·学习方法·业界资讯·twitter
xuhaoyu_cpp_java5 小时前
SpringMVC学习(五)
java·开发语言·经验分享·笔记·学习·spring