SpringCloud-Eureka注册中心单、集群方式搭建

1 篇文章 0 订阅
1 篇文章 0 订阅


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、创建项目

因为对于个人来说只有一台电脑,无法将多个服务部署到多台服务器(有条件的可以购买服务器,腾讯云,阿里云等),所以创建父子级的项目模拟微服务和集群。

1.创建父级项目(依图所示)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
一直next,知道如下图,点击finish,完成
在这里插入图片描述

2.配置父级项目(修改一下结构,配置文件)

1.修改MAVEN配置

MAVEN
在这里插入图片描述在这里插入图片描述
修改为自己的Maven配置
在这里插入图片描述

2.修改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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.example</groupId>
    <artifactId>spring-cloud-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <!--
    注意 最后打包 最外层的pom 需要更改为 pom而不是jar
    <packaging>jar</packaging>
    -->
    <packaging>pom</packaging>
    <name>spring_cloud_study</name>
    <description>Spring Cloud project for Spring Boot</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring.boot.version>2.1.4.RELEASE</spring.boot.version>
        <spring.cloud.version>Greenwich.SR1</spring.cloud.version>
        <maven.compiler.plugin.version>3.6.1</maven.compiler.plugin.version>
        <java.version>1.8</java.version>
    </properties>

    <!-- spring cloud -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
   <!--springboot  lombok  devtools  configuration-processor -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.修改目录结构(没错就是删掉src):

在这里插入图片描述

##创建子模块

创建方式类似父项目的创建

1.创建子项目

父项目上右建
在这里插入图片描述
余下步骤和父项目创建方式一样
在这里插入图片描述
在这里插入图片描述
一直next,最后finish,目录结构你如下
在这里插入图片描述

1.修改子项目pom(对比一下可以发现修改的点,parent,dependencies)

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>spring-cloud-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.example</groupId>
    <artifactId>spring-cloud-eureka</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-cloud-eureka</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.上一步是相当于子引用了父级的pom,这一步相当于告诉父他的子项目有哪些,加module到父级的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>spring-cloud-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>spring-cloud-demo</name>
    <description>Demo project for Spring Boot</description>

    <modules>
        <module>spring-cloud-eureka</module>
    </modules>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring.boot.version>2.1.4.RELEASE</spring.boot.version>
        <spring.cloud.version>Greenwich.SR1</spring.cloud.version>
        <maven.compiler.plugin.version>3.6.1</maven.compiler.plugin.version>
        <java.version>1.8</java.version>
    </properties>

    <!-- spring cloud -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <!--springboot  -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

现在父子项目就创建好了,并且与spring-cloud相关的jar包也已经引入。(关键处)

    <!-- spring cloud -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

二、搭建Eureka单例服务

1.在application.properties下配置(或application.yml)

#声明本服务在注册中心展示的名字、也是在网关访问时定位服务的名字
spring.application.name=spring-cloud-demo-eureka

#在windows下的hosts文件中增加了  127.0.0.1  spring-cloud
eureka.instance.hostname=spring-cloud
#项目启动端口
server.port=8000

#是否将自己作为服务注册到注册中心,默认为true,false不能将自己注册到自己,
#如果有多个服务注册中心的微服务的话,可以将这个设置为true,表示可以将注册中心1注册到注册中心2中
eureka.client.register-with-eureka=false
#表示是否从eureka注册中心中获取注册信息,默认为true
eureka.client.fetch-registry=false
#注册中心的交互地址,设置多个地址可以用,分隔  查询服务和注册服务都需要依赖这个地址
#关于设置注册中心这么关键的服务,如果是单点话,遇到故障就是毁灭性的。
#在一个分布式系统中,服务注册中心是最重要的基础部分,理应随时处于可以提供服务的状态。为了维持其可用性,使用集群是很好的解决方案
#所以 在一个分布式系统中,设置最少两个服务注册中心是最基本的
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

2.启动类上加注解(@EnableEurekaServer)

package com.example.springcloudeureka;

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

@EnableEurekaServer
@SpringBootApplication
public class SpringCloudEurekaApplication {

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

}

因为没加junit的jar需删除test下的测试启动文件

三、启动访问

1. IDEA启动

在这里插入图片描述

2. 浏览器访问(如下图所示即为成功)

http://localhost:8000/

在这里插入图片描述

总结

1、搭建父子级结构项目
2、导入springcloud,eureka相关的jar
3、配置application.properties
4、启动类上添加注解

四、搭建Eureka集群(其实差不多)

单个的eureka服务可能会挂掉,这样的话会导致其他的服务访问不了,因此提供多个服务,防止这种问题。eureka服务一般是不注册自己的,多个的话,除了自己外,会向其他eureka服务注册,即你中有我,我中有你
创建

#如果有多个服务注册中心的微服务的话,可以将这个设置为true,表示可以将注册中心1注册到注册中心2中
eureka.client.register-with-eureka=true
#表示是否从eureka注册中心中获取注册信息,默认为true
eureka.client.fetch-registry=true

在这里插入图片描述
application.properties
运行时需切换spring-cloud-eureka3为对应的properties文件名(application去掉),因为各个文件的端口不同(否则端口被占用,无法启动项目)

spring.profiles.active=application-spring-cloud-eureka3

application-spring-cloud-eureka2.properties

#声明本服务在注册中心展示的名字、也是在网关访问时定位服务的名字
spring.application.name=spring-cloud-eureka2

#在windows下的hosts文件中增加了  127.0.0.1  spring-cloud-eureka2

# windows host文件下配置 127.0.0.1 eureka7012.king.com
eureka.instance.hostname=eureka7012.king.com
server.port=7012

#是否将自己作为服务注册到注册中心,默认为truefalse不能将自己注册到自己,
#如果有多个服务注册中心的微服务的话,可以将这个设置为true,表示可以将注册中心1注册到注册中心2中
eureka.client.register-with-eureka=true
#表示是否从eureka注册中心中获取注册信息,默认为true
eureka.client.fetch-registry=true
#注册中心的交互地址,设置多个地址可以用,分隔  查询服务和注册服务都需要依赖这个地址
#关于设置注册中心这么关键的服务,如果是单点话,遇到故障就是毁灭性的。
#在一个分布式系统中,服务注册中心是最重要的基础部分,理应随时处于可以提供服务的状态。为了维持其可用性,使用集群是很好的解决方案
#所以 在一个分布式系统中,设置最少两个服务注册中心是最基本的
eureka.client.serviceUrl.defaultZone=http://eureka7011.king.com:7011/eureka/,http://eureka7013.king.com:7013/eureka/
#http://eureka2002.hmc.com:2002/eureka/,http://eureka2003.hmc.com:2003/eureka/ # 集群
#单机defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/       #设置与Eureka注册中心交互的地址,查询服务和注册服务用到

IDEA 实现单个项目启动多个实例(不需要创建多个相同的项目挨个启动)

1.Edit Configurations

在这里插入图片描述
选择启动类,勾选Allow parallel run (允许并行运行)
在这里插入图片描述

运行结果

服务一
在这里插入图片描述
服务二
在这里插入图片描述
服务三
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值