首页 > 分享 > spring boot 2.0.3+eureka高可用配置 及unavailable

spring boot 2.0.3+eureka高可用配置 及unavailable

最近在复习spring boot的玩意儿,然后集成eureka高可用的时候遇到点问题,在此记录一下。

最开始spring boot版本从1.4.5.RELEASE到1.5.9然后到最终2.0.3.RELEASE版本,中间各种版本不一致,版本大概对应关系见下面截图。

最开始,eureka准备了3个工程,分别作为eureka的3个节点,但是后来想到spring boot 启动的时候可用指定properties文件,然后就只剩下一个工程了。idea启动配置见下面截图

项目目录结构

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>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.0.3.RELEASE</version>

<relativePath/>

</parent>

<modelVersion>4.0.0</modelVersion>

<groupId>org.huangyee</groupId>

<artifactId>spring-boot-eureka-server</artifactId>

<version>1.0.0-SNAPSHOT</version>

<packaging>jar</packaging>

<name>spring-boot-eureka-server</name>

<url>http://www.example.com</url>

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<maven.compiler.source>1.8</maven.compiler.source>

<maven.compiler.target>1.8</maven.compiler.target>

<spring.cloud.version>Finchley.RELEASE</spring.cloud.version>

</properties>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.11</version>

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

properties配置:

spring.application.name=eureka-server

server.port=8002

eureka.instance.hostname=server1

eureka.client.service-url.defaultZone=http://server2:8003/eureka/

#实例注册到服务中心显示ip

eureka.instance.prefer-ip-address=false

##元数据

eureka.instance.metadata-map.instanceId=${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}

#是否作为eureka客户端注册

eureka.client.register-with-eureka=true

#是否检索服务

eureka.client.fetch-registry=true

#客户端缓存更新时间

eureka.client.registry-fetch-interval-seconds=5

这个是server1的配置,server2基本一样,只是server.port跟defaultZone小改一下。

启动类配置:

package org.huangyee;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**

* Hello world!

*/

@SpringBootApplication

@EnableEurekaServer

public class App {

public static void main(String[] args) {

SpringApplication.run(App.class, args);

}

}

启动之后,访问localhost:8002,显示服务是注册上去了,但是都不可用,见截图

百度找了很多eureka高可用的文章,以及unavailable的博客,都没有解决问题。最后找到一个简书上的文章,解决问题。

链接:https://www.jianshu.com/p/59c54ccc6ba6

我的处理方案是:

eureka.instance.prefer-ip-address=false

简书中提到的是:

解决问题

其他的一些小问题也记录一下:

com.sun.jersey.api.client.ClientHandlerException: java.net.UnknownHostException: server1

服务注册的时候是根据域名:端口来注册的,所以这个需要修改hosts文件,

windows的hosts文件在“c:windowssystem32driversetc”中。

Linux更改hosts的操作如下:vim /etc/hosts

mac更改:sudo vim /private/etc/hosts

2 获取客户端ip地址,老版本spring cloud 注解为

spring.cloud.client.ipAddress

新版本已经修改为

spring.cloud.client.ip-address

如果不修改,直接启动的话,会提示 properties文件解析错误,找不到${spring.cloud.client.ipAddress}或者${spring.cloud.client.ip-address},对应修改就行。

3 版本不一致。spring boot跟spring cloud版本对应不上

java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.<init>([Ljava/lang/Object;)V

4 多个注册中心如果依次启动,会出现下面错误,直接略过就好。这是由于需要注册的eureka server还没有启动导致,启动了就好了

[com.netflix.discovery.DiscoveryClient] method:fetchRegistry line:951 - DiscoveryClient_EUREKA-SERVER2/192.168.199.155:eureka-server2:8003 - was unable to refresh its cache! status = Cannot execute request on any known server

com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server

相关知识

Spring Boot开发的植物健康管理系统研究
Java实现鲜花预定系统:Oracle数据库与Spring Boot框架整合实战
Spring Boot:植物健康监测的智能专家
植物健康,Spring Boot来守护
Spring Boot植物健康系统:绿色科技的创新
Spring Boot植物健康系统:智慧农业的新篇章
Spring Boot:植物健康监测的智能解决方案
Spring Boot + Vue的网上商城之客服系统实现
基于Spring Boot的植物健康系统
Spring Boot实现线上鲜花销售系统

网址: spring boot 2.0.3+eureka高可用配置 及unavailable https://m.huajiangbk.com/newsview948930.html

所属分类:花卉
上一篇: 如何使用php发送短信验证码
下一篇: Xcode11 未找到应用程序的