转自:https://blog.csdn.net/xlecho/article/details/80622700
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>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
启动类
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);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
以上两个文件不详细讲解,需要的可以直接复制粘贴。关键位置在于application,那么我们先来看一下几个配置文件的内容
- application.yml
spring:
application:
name: eureka
profiles:
active:demo1
- 1
- 2
- 3
- 4
- 5
- 6
- application-demo1.yml
server:
port: 10080
eureka:
instance:
hostname: demo1
client:
service-url:
defaultZone: http://demo2:10081/eureka/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- application-demo2.yml
server:
port: 10081
eureka:
instance:
hostname: demo2
client:
service-url:
defaultZone: http://demo1:10080/eureka/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
注意:这是一个工程内的配置文件,配置一定要搞清楚逻辑,不让肯定会出问题。
那么他最关键的地方在于什么地方呢?
这里的关系一定不能乱,一定不能乱,一定不能乱,重要的事情说三遍!
然后再一个难点来了,那就是因为一个项目的原因,所以我们需要手动配置出两个服务,配置成功之后我们可以将一个项目当两个服务跑
图片上我的是已经配置好了的,所以你看到了两个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-
- 1
- 2
- 3
- 4
- 5
- 6
- 7
在刚启动的时候,两个服务都会报错,这是没有问题的。因为服务1启动的时候正同时去注册到服务2,然后服务2启动的同时也在注册到服务1。但是两个服务都没有准备好,所以他们不断尝试,最终不断报错。当两个服务都正常启动完成之后,这个错误就不会出现了。