最近在复习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
简书中提到的是:
解决问题
其他的一些小问题也记录一下:
1
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 未找到应用程序的 |