SpringCloud--构建一个高可用的服务注册中心

xl_echo编辑整理,欢迎转载,转载请声明文章来源。更多IT编程案例、资料请联系QQ:1280023003 ,群:298140694
百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!


前言:看了很多篇一个高可用服务注册中心的文章,发现有一个共同点,对于高可用服务注册中心都在一个工程之内去配置,这里建议大家如果觉得配置很绕可以建立多个工程来实现,没必要一定要在一个工程内配置。容易绕晕。这里详细讲解一下在一个工程内配置一个高可用的服务注册中心,希望能够帮助大家。

开发工具 版本
JDK 1.8
Maven maven-3.1.1
IDEA IntelliJ IDEA 2018.1.3 x64
Notepad Notepad++

构建一个SpringBoot工程,进行基本配置,项目结构如下:
这里写图片描述

pom.xm是比较关键的一个文件,当然配置比较固定。

<?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.example</groupId>
    <artifactId>demo_eureka</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>demo_eureka</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.13.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

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

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <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>

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


</project>

启动类

package com.example.demo_eureka;

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

@EnableEurekaServer
@SpringBootApplication
public class DemoEurekaApplication {

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

以上两个文件不详细讲解,需要的可以直接复制粘贴。关键位置在于application,那么我们先来看一下几个配置文件的内容

  • application.yml
spring:
  application:
    name: eureka
  profiles:
    active:demo1
  • application-demo1.yml
server:
  port: 10080
eureka:
  instance:
    hostname: demo1
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://demo2:10081/eureka/
  • application-demo2.yml
server:
  port: 10081
eureka:
  instance:
    hostname: demo2
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://demo1:10080/eureka/

注意:这是一个工程内的配置文件,配置一定要搞清楚逻辑,不让肯定会出问题。
那么他最关键的地方在于什么地方呢?
这里写图片描述

这里的关系一定不能乱,一定不能乱,一定不能乱,重要的事情说三遍!

然后再一个难点来了,那就是因为一个项目的原因,所以我们需要手动配置出两个服务,配置成功之后我们可以将一个项目当两个服务跑
这里写图片描述

图片上我的是已经配置好了的,所以你看到了两个DemoEurekaApplication,你配置之前应该只有一个。配置图解
这里写图片描述

配置第二个也一样,关键是下面图片标记的这一行
这里写图片描述

有几个配置文件就配置几个这样的服务,我这里是有两个,所以配置了两个服务。然后配置完之后,还要在本地配置一下。具体如下
这里写图片描述
这里写图片描述

这个文件中你可能有其他的东西,不要动他,按照下面的红框配置即可

然后就项目搭建就大功告成啦!!!接下来我们启动,看效果。启动成功分别方位localhost:10081和localhost10080
这里写图片描述
这里写图片描述
我们可以看到10080的服务中,注册到了10081,10081的服务注册到了10080中,这就代表你已经成功啦!!!

但是,这里还要补充一点,你的两个服务都在报这样的错。(东西太多只截取了一小部分)

com.sun.jersey.api.client.ClientHandlerException: java.net.UnknownHostException: demo1
    at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1]
    at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123) ~[jersey-client-1.19.1.jar:1.19.1]
    at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.7.2.jar:1.7.2]
    at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1]
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-

在刚启动的时候,两个服务都在报错,这是没有禁用自己注册到自己服务中心的功能,加上这个就好了

register-with-eureka: false
    fetch-registry: false

猜你喜欢

转载自blog.csdn.net/xlecho/article/details/80622700