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
相关推荐
怒放吧德德37 分钟前
RocketMQ从实战到源码:初识RocketMQ
java·后端·rocketmq
怎么就重名了1 小时前
Kivy的属性系统
java·前端·数据库
daidaidaiyu1 小时前
一文入门 Spring Security with 单点登录(jasig)
java·spring
哈哈老师啊1 小时前
Springboot就业管理系统bk5uv(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·spring boot·spring
chao1898441 小时前
基于C#实现Modbus通信及CRC校验
java·开发语言·c#
hunjinYang1 小时前
源码配置——基于Gradle搭建spring-framework-6.2.15版本阅读环境
java·后端·spring
编程饭碗1 小时前
【Spring全局异常处理 早抛晚捕】
java·数据库·spring
咸鱼2.01 小时前
【java入门到放弃】Elasticsearch概念
java·elasticsearch·jenkins
毕设源码-邱学长2 小时前
【开题答辩全过程】以 基于JSP论坛系统设计与实现为例,包含答辩的问题和答案
java·开发语言
找不到、了2 小时前
系统常用的限流方案实践
java