初学SpringCloud:建设EurekaServer集群(新建一个EurekaServer模块)_eureka如何新增server节点到集群里-程序员宅基地

技术标签: spring  实习期间学习SpringCloud  maven  intellij-idea  java-ee  

目录

我的上一篇博客:

1、背景介绍

2、本篇博客的目的

3、新增一个7002端口的EurekaServer模块,展示一下这个模块的文件结构

4、新增一个7002端口的EurekaServer模块,展示一下这个模块的POM文件

5、新增一个7002端口的EurekaServer模块,展示一下这个模块的application文件

6、新增一个7002端口的EurekaServer模块,展示一下这个模块的主启动类。

7、最后还有一个很重要的配置文件需要修改


我的上一篇博客:

初学SpringCloud:建立使用90端口的微服务模块,注册到服务注册中心,使得这个模块的方法调用8001端口的业务逻辑模块的方法

1、背景介绍

我的这个专栏主要记录讲述的是我做的一个简单的微服务的项目。截止目前在使用的是Eureka,目前我已经完成了一个使用7001为端口的EurekaServer服务注册中心模块,一个使用8001端口的EurekaClient服务提供者模块,一个使用90端口的EurekaClient服务消费者模块。90端口的模块可以使用RestTemplate类的方法发送HTTP请求来调用8001端口模块的业务逻辑服务。

2、本篇博客的目的

项目已经完成的工作,就只是非常简单的结构,EurekaClient服务消费端,服务提供端和EurekaServer全部都是单个的模块。我在我的一篇博客中简单的陈述过搭建集群的目的和重要性。为了保证服务注册中心的可用性,同时也为了进一步体现Eureka的AP特性(高可用和分区容错),我尝试着搭建EurekaServer的集群。

3、新增一个7002端口的EurekaServer模块,展示一下这个模块的文件结构

由于是新增的一个模块,大体上跟7001为端口的EurekaServer模块的文件结构是一样的,如下如图所示:


文件结构还是比较简单的,只有一个主启动类和一个application配置文件以及POM文件。简单来说,这个模块的代码逻辑就是:首先在POM文件中把需要的依赖引入进来;然后在application文件中配置必要的配置属性;最后写主启动类,在主启动类上面写上必要的注解。

4、新增一个7002端口的EurekaServer模块,展示一下这个模块的POM文件

<?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">
    <parent>
        <artifactId>cloud2023</artifactId>
        <groupId>com.lanse.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-eureka-server7002</artifactId>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <version>RELEASE</version>
        </dependency>

        <dependency>
            <groupId>com.lanse.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>

    </dependencies>

</project>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    <version>RELEASE</version>
</dependency>

由于是一个EurekaServer的模块,上面的依赖是必须的。

<dependency>
    <groupId>com.lanse.springcloud</groupId>
    <artifactId>cloud-api-commons</artifactId>
    <version>${project.version}</version>
</dependency>

上面的这个依赖是我把所有模块都会用到的公共实体类抽了出来,组成的一个模块,然后Maven的install命令以后,生成了jar包。

后面的依赖都是常规必须的依赖,在这里就不一一解释了。

5、新增一个7002端口的EurekaServer模块,展示一下这个模块的application文件

server:
  port: 7002
eureka:
  instance:
    hostname: eureka7002.com #eureka服务端的实例名称
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/  #这个的意思很有必要去理解一下
  server:
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 2000

首先就是设置端口,我把端口按照约定设置为 7002

然后设置eureka.instance.hostname属性的值,为了跟7001为端口的EurekaServer保持一致,设置为euraka7002.com。设置这个名称以后,在地址栏可以直接输入: http://eureka7002.com:7002/  到EurekaServer端的图形化界面,查看这个EurekaServer上面的注册情况。

下面两个属性分别是 注册到Eureka和从服务注册中心抓取注册表,由于本来就是EurekaServer,因此设置为false,当然了,也是可以设置为true的。这里需要明白一点,默认的Eureka服务注册中心的集群,各个EurekaServer之间都是会互相复制注册表的。也就是说,即使一个服务提供者模块的application文件中设置为只在一个EurekaServer上面注册,但是当全部服务启动以后,你还是可以在其他的EurekaServer的注册表上面看到这个服务的。这也是Eureka保证高可用的一点体现。

下面的defaultZone属性,是一个关键的属性。目前项目有了两个EurekaServer模块,需要把它们两个互相联通,这样才会互相的更新注册表。有一句话很形象,叫做: 互相守望,相互注册,所以在这里把7001为端口的EurekaServer模块的地址写上来。请注意,还需要对7001为端口的EurekaServer模块的application文件进行修改,满足  互相守望,相互注册的原则:那么7001为端口的defaultZone属性的值就应该是: http://eureka7002.com:7002/eureka

下面还有最后的两个属性,分别是是否启动自我保护机制和配置Eureka Server清理无效节点的时间间隔。在这里我把自我保护机制关闭了,默认是打开的,这是Eureka高可用的一个体现。又设置了Eureka Server清理无效节点的时间间隔,也就是说当我们的服务的结点有一段时间没有发送心跳以后,在一定的时间间隔内将这个服务的名称从服务注册表中清楚。

还有其他的启动健康检查属性,甚至说是要重写HealthCheckHandler接口等更多的配置,在项目里面就先不涉及了。

6、新增一个7002端口的EurekaServer模块,展示一下这个模块的主启动类。

package com.springcloud;

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

@SpringBootApplication
@EnableEurekaServer
public class EurekaMain7002 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaMain7002.class,args);
    }

}


@SpringBootApplication注解是必须额,肯定是需要加上去的。

由于这个模块是一个EurekaServer服务注册中心的模块,所以需要使用 @EnableEurekaServer注解

7、最后还有一个很重要的配置文件需要修改

由于我们大多数人学习,甚至在开发过程中,我们的EurekaServer的集群都是在同一台物理服务器上面的,因此需要修改一个配置文件。

搭建EurekaServer集群,需要注意两点内容:

  • 需要保证 eureka.instance.hostname eureka服务的实例名称在集群中保证唯一。

  • 需要保证 eureka.client.service-url.defaultZone 的主机名(或IP)要唯一

也就是上面的两点内容,我们已经在application文件中都设置了eureka.instance.hostname属性;但还需要IP一样,因此需要修改一个配置文件。

这个配置文件是我们的计算机自带的一个文件,我本人的操作系统是Win10 的,它的文件路径是:

C:\Windows\System32\drivers\etc\hosts

需要修改这个文件的内容,但是需要管理员权限;有的计算机可能安装的有一些杀毒软件什么的,即使有管理员权限也是不允许修改的。在这里我建议,可以把它复制到桌面上,然后修改了以后,再替换原有的文件就可以了。

我博客中的项目,需要在hosts文件的末尾加上下图中的内容就可以了:

 其中带有  #  的全都是注释,不需要理会

eureka7001.com和eureka7001.com都是我们的两个EurekaServer的application文件中的eureka.instance.hostname属性的值

关于这个配置文件的修改,也可以参考下面的一篇博文:

https://blog.csdn.net/xiaojin21cen/article/details/107313308

这个就只是一个EurekaServer的模块,我们配置的还比较的简单,Eureka都在jar包里面给我们封装好了,因此没有其他的业务逻辑的代码

至此,项目就完成了7002端口的EurekaServer模块,并且和7001端口的EurekaServer模块单方面的,联系了起来。

我的下一篇博客:

初学SringCloud:建设EurekaClient集群(新建一个服务提供者模块,以8002为端口)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_46281472/article/details/119772732

智能推荐

论Web 2.0时代的PHP-程序员宅基地

文章浏览阅读770次。转自:http://www.phpchina.com/viewnews_1544.html发布时间: 2006-9-30 18:20  作者: 钱宏武   信息来源: PHPchina   随着所谓WEB2.0时代来临,程序员从来没有时代象今天那样受人注意,很多程序员对于语言的争论也从来没有象今天这样剧烈,JAVA、C++、PHP、ASP等等,最近又出来一个Ruby,加上Pytho

华为手机如何升级鸿蒙系统_四款华为手机可以直接升级鸿蒙2.0系统,正在用的赚大了!...-程序员宅基地

文章浏览阅读747次。原标题:四款华为手机可以直接升级鸿蒙2.0系统,正在用的赚大了!现代科技已经非常发达了,科技产品在我们的生活中占据的比重也是越来越大,科技的不断进步,令我们的生活变得越来越便捷。忘了从什么时候开始,我们的生活和各种科技产品的联系越来越紧密,紧密到我们已经完全离不开智能设备了。 关于鸿蒙操作系统这个事情,真的是从很早很早之前就一直在宣传,小编也是等待了非常久的时间,同样的,通过网络上的一些网友的评论..._华为ova8pro怎么升级鸿蒙系统

计算机没有本地管理员权限设置密码,软件设置管理员权限 软件需要管理员权限...-程序员宅基地

文章浏览阅读661次。如何给软件自动设置管理员运行?首选请使用系统管理员账号登录系统.然后在桌面上右击"我的电脑"(如果桌面上没有,请在开始菜单中右击我的电脑也可以),选择"管理",打开"计算机管理"页面,在左边的方框中依次展开"本地用户和组"-->"组",再在右边方框中"右击","administrators"选择"属性",在打开的"administrators属性"对话中点击"添加"打开"选择用户"对话框,点..._没有管理员密码怎么打开需要管理员的软件

RSA加密算法在iOS9下的问题解决方案_ios rsa兼容性失败-程序员宅基地

文章浏览阅读3.7k次。之前写的可运行的RSA加密解密算法,升级到iOS9之后,到SecItemAdd就crash掉了。 打了断点发现SecKeyRef竟然为空,几个月前可不是这样的,只能是iOS9更新了什么。看了一下官方文档,给出了其他方向解决方案。_ios rsa兼容性失败

Bash脚本的空格和“期待一元表达式”错误-程序员宅基地

文章浏览阅读3.3w次,点赞10次,收藏27次。很少自己写Bash脚本,一写就出现了一些奇怪的问题,主要还是对Bash脚本的语法不够熟悉,毕竟很少使用。当做记录一下吧,今天因为空格导致的一些脚本问题:1、Bash脚本中的赋值符号“=”前后不能有空格。例如给变量number赋值要写成“number=1”,不能写成“number = 1”。大多数编程语言都会忽略掉一些没有意义的空格,例如对于Java语言上面两种写法在语法上都是正确,_期待一元表达式

sidecar_Sidecar用于代码拆分-程序员宅基地

文章浏览阅读445次。Code splitting. Code splitting is everywhere. However, why? Just because there is too much of javascript nowadays, and not all are in use at the same point in time. 代码拆分。 代码拆分无处不在。 但是,为什么呢? 仅仅是因为现在的ja..._sidecar 能不能写到另一个文件中

随便推点

合辑 | 面试必备!18篇Java面试疑难点详解_java数据库操作-程序员宅基地

文章浏览阅读5.9k次,点赞9次,收藏85次。简介:就目前就业环境来看,学习Java软件开发是不会过时的,据各大招聘网站统计,Java程序员的需求10年来一直跃居首位。本节小编汇总了18篇Java面试相关的疑难点解析,知识点+理论详解帮助你稳扎稳打,学好Java不再是难事~Java数据库开发1.面试疑难点解析——Java数据库开发(一)当面试官提问数据库优化及NoSQL使用场景时,该如何回答?在现实的开发环境之中所谓的数据库优..._java数据库操作

编写 Qt 跨线程异步调用器-程序员宅基地

文章浏览阅读2.3k次,点赞2次,收藏23次。编写 Qt 跨线程异步调用器一、设计背景众所周知,Qt 的信号槽系统提供了线程安全的跨线程异步执行代码的机制(Qt::QueuedConnection)。使用该机制,可以让槽函数代码在另..._qt metacall 可以跨线程 调用吗

vue3在自定义hooks中使用userRoute结果为undefined,如何在自定义hooks中使用userRoute_useroute undefined-程序员宅基地

文章浏览阅读6.3k次,点赞5次,收藏6次。vue3.0中在setup中使用路由import { defineComponent } from 'vue'import { useRoute, useRouter } from "vue-router"export default defineComponent({ const route = useRoute() const router = useRouter() console.log(route.query.id) router.push(_useroute undefined

web项目使用OpenOffice实现前端在线预览office文档(超详细)_openoffice前端组件-程序员宅基地

文章浏览阅读5.7w次,点赞40次,收藏133次。超详细的OpenOffice实现前端在线预览office文档记录最近搞一个数字化共享平台,是一个java web项目,使用框架ssm,其中项目有一个需要在线预览PDF、excle、ppt、word文件的功能,也是各种谷歌百度,乱七八糟,要么就是方法太久远,要么就是教程写得太随意。 现在特意整理一个完整的web项目使用OpenOffice实现前端在线预览office文档功能的教程。预览pp..._openoffice前端组件

【Elasticsearch】为Elasticsearch启动https访问_elasticsearch启动 ssl problem received fatal alert:c-程序员宅基地

文章浏览阅读485次。1.概述转载:为Elasticsearch启动https访问_elasticsearch启动 ssl problem received fatal alert:certificate_unknown

邻接矩阵建立无向图_采用邻接矩阵创建无向图-程序员宅基地

文章浏览阅读5.4k次。#include&lt;iostream&gt;using namespace std;const int MaxSize=10;class MGraph{public:MGraph(int n,int e){vertexNum=n;arcNum=e;for(int i=0;i&lt;vertexNum;i++){cout&lt;&lt;"请输入第"&lt;&lt;i&lt;&lt;"..._采用邻接矩阵创建无向图

推荐文章

热门文章

相关标签