我目前正面临一个问题,即Eureka从未清除因虚拟机意外停机而变得陈旧的服务实例.可以理解的是,Eureka的自我保护模式已经启动,因为在服务续订/心跳请求中存在大幅下降(低于阈值).然而,15个多小时后,死亡的实例仍在Eureka注册.这是一个主要问题,因为服务请求继续被定向到死实例,仅返回错误.
我的希望是门槛不断调整,经过一段时间后,尤里卡的门槛将处于新的标准水平,自我保护模式将被重置.我们在镜像设置中使用Eureka,我们的配置不是很复杂.
我们的设置:
Eureka通过spring-boot-starter-parent 1.2.5.RELEASE
eureka:
dashboard:
path: services
enabled: false
instance:
hostname: localhost
leaseRenewalIntervalInSeconds: 3
metadataMap:
managementPath: /admin
instanceId: discoveryPrimary
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
server:
waitTimeInMsWhenSyncEmpty: 0
Run Code Online (Sandbox Code Playgroud)
是否可以调整Eureka配置以重置自我保存模式(停止清除实例的位置)并允许它在服务已停止5分钟以上时清除服务注册表?
几个月以来,我们一直在使用Eureka和我们的Spring Boot应用程序.我们已使用@DiscoveryClient注释启用了应用程序之间的服务查找.注册,续租和注销按预期进行.
最近,我们遇到了一个场景,我们有非Java应用程序组件(用C++编写),它暴露了我们的许多Spring Boot Java应用程序将使用的3个REST服务端点.我们正在尝试查看C++组件是否可以利用Eureka服务器的REST API在它出现时进行自我注册,以便Spring Boot Java应用程序可以通过Eureka执行常规查找以与C++组件保持联系.
既然不能用在C++组件(显然)尤里卡客户端,我开始测试直接的REST API(如描述在这里使用邮差).通过使用POST方法向http:// eurekaserver:8761/eureka/apps/FOO-APP(使用instanceId = 1111和hostName = foo-app)发送JSON有效负载,注册工作没有任何问题.我可以查询http:// eurekaserver:8761/eureka/apps,可以看到按预期在那里列出的FOO-APP.
但是,当我尝试使用DELETE方法取消操作到http:// eurekaserver:8761/eureka/apps/FOO-APP/1111或http:// eurekaserver:8761/eureka/apps/FOO-APP/foo-app时,我收到404错误.
使用instanceId:
{
"timestamp": 1447479397996,
"status": 404,
"error": "Not Found",
"message": "Not Found",
"path": "/eureka/apps/FOO-APP/1111"
}
Run Code Online (Sandbox Code Playgroud)
OR(hostName的结果相同):
{
"timestamp": 1447479397996,
"status": 404,
"error": "Not Found",
"message": "Not Found",
"path": "/eureka/apps/FOO-APP/foo-app"
}
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的组合,但我无法完成这项工作.我有一种感觉,我错过了一些明显的东西 - 可能是一些小事.任何有关这方面的帮助将不胜感激.
PS: Eureka REST端点文档在URL中提到"v2".但是,这在我的情况下不起作用.注册(适用于我)不使用如上所述的"v2".如果有人可以验证这一点,那也会有所帮助.这似乎没有足够的材料.
我在我的localhost上运行我的eureka-server.我可以在localhost运行服务上注册我所有的其他服务,并且可以像预期的那样注册.
现在我想注册一个在linux机器上运行的服务.我的属性看起来像这样:
spring.application.name=myService-service
spring.cloud.config.uri=http://myMachine.domain.lan:8888
server.port=8002
eureka.client.service-url.default-zone=http://myMachine.domain.lan:8761/eureka/
Run Code Online (Sandbox Code Playgroud)
但该服务无法在localhost上的eureka服务器上注册.(最后它在localhost上运行相同的服务)
我得到了这些例外:
java.net.ConnectException: Connection refused
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
Run Code Online (Sandbox Code Playgroud)
但是我能够从我在localhost上运行的配置服务中获取配置文件.
从linux机器(客户端)向localhost(服务器)注册我的服务到eureka需要哪些配置?
我使用这个注释:
服务:
@SpringBootApplication
@EnableDiscoveryClient
@EnableEurekaClient
public class MyServiceApplication {
Run Code Online (Sandbox Code Playgroud)
尤里卡服务器:
@SpringBootApplication
@EnableEurekaServer
public class EurekaServiceApplication {
Run Code Online (Sandbox Code Playgroud)
PS:对面方式也不起作用.意味着在linux机器上有eureka服务器,在localhost上有服务.得到相同的例外.
EDIT1:
Eureka-Server属性:
spring.application.name=eureka-service
spring.cloud.config.uri=http://myMachine.domain.lan:8888
server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.instance.hostname=KBHWS242.myDomain.lan
eureka.instance.prefer-ip-address=true
Run Code Online (Sandbox Code Playgroud)
EDIT2:
testsrv是linux机器.(172.25.82.108)
2016-08-31 09:17:01.912 INFO 27105 --- [ main] com.netflix.discovery.DiscoveryClient : Starting heartbeat executor: renew interval is: 30
2016-08-31 09:17:01.919 INFO 27105 --- [ main] c.n.discovery.InstanceInfoReplicator : InstanceInfoReplicator onDemand update allowed rate per …Run Code Online (Sandbox Code Playgroud) 我有2个已经注册到Eureka的Spring应用程序("client-app"和"service-app")(并通过Feign Client进行交谈).但是,我必须与Solr的实例交谈,我不得不在属性文件中对IP地址进行硬编码.我宁愿不这样做并使用Eureka进行服务发现.
问题:是否有方法/插件让solr在Eureka中注册,以便客户端可以发现它(即使它是通过启动监听器或某种方式以编程方式)?
我查看了solr API,它似乎没有生命周期监听器(onStartUp或onShutdown挂钩)
我使用Spring boot zuul和eureka服务配置了我的微服务.现在我需要验证所有路由/ REST API调用.我的意思是,对于所有API客户端发送一个accessToken.在zuul服务上,在路由到特定服务之前,我必须使用accessToken调用微服务(auth-service),并且auth-service将检查用户是否存在以便发送accessToken.如果accessToken有效,则只应进行路由.
请帮我用Spring Boot服务实现这个.
谢谢.
spring-mvc spring-boot microservices netflix-eureka netflix-zuul
我想在没有 Spring Boot 的情况下进行服务发现。所以我下载了 netflix 项目示例,因为它的 gradle 项目我想使它成为 maven。
所以我创建了 maven 项目,导入了类和配置,并添加了依赖项。
我将它eureka.war放在 Tomcat webapps 文件夹中,然后启动了 eureka 服务器。
但是当我在 eclipse 中运行应用程序时,我收到了一个错误。
错误 c.netflix.discovery.DiscoveryClient - DiscoveryClient_UNKNOWN/DESKTOP-B997GFD - 无法刷新其缓存!status = 没有已知的尤里卡服务器;集群服务器列表为空 com.netflix.discovery.shared.transport.TransportException: 没有已知的尤里卡服务器;集群服务器列表为空
并且无法从尤里卡获取示例服务的实例以与之交谈
我有2个使用Netflix eureka构建的微服务.他们使用假装客户进行沟通.在我的本地环境中假装客户端工作没有任何问题.但是在Predix(云代工厂)环境中,他们无法沟通.假设客户端总是给出连接超时错误.由于发现feign客户端尝试使用实例ip地址连接(我认为feign客户端使用内部ip地址).有没有办法解决这个问题,可能是启用容器通信或使用公共uri
编辑:我设法通过更改主机名如下所示获取公共网址.
eureka:
instance:
hostname: ${vcap.application.uris[0]}
Run Code Online (Sandbox Code Playgroud)
但在eureka服务器中它注册为$ {vcap.application.uris [0]}:[随机端口](如xxxxxx.run.aws-usw02-pr.ice.predix.io:61142/yyy)有没有办法删除该随机端口.
service-discovery cloud-foundry netflix-feign netflix-eureka predix
嗨,我想删除zuul动态创建的路由。我没有使用云服务器。我无法使用添加路线discoveryclientroutelocator。
但是我找不到注销动态添加的路由的选项。这种删除应该在不重新启动网关的情况下发生。救命。
ZuulRoute zuulRoute = new ZuulRoute();
zuulRoute.setId(externalapis.getServiceId());
zuulRoute.setServiceId(externalapis.getServiceId());
zuulRoute.setPath(externalapis.getPath());
zuulRoute.setUrl(externalapis.getUrl());
zuulRoute.setRetryable(true);
discoveryClientRouteLocator.addRoute(zuulRoute);
Run Code Online (Sandbox Code Playgroud) 我正在从 javabrains.io 做微服务教程,一切都很好,直到我尝试在其中一个微服务中实现 Eureka 服务器。
我的主要课程很简单:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class DiscoveryServerApplication {
public static void main(String[] args) {
SpringApplication.run(DiscoveryServerApplication.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
我的 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">
<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>pl.Grzesiek</groupId>
<artifactId>discovery-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>discovery-server</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<!-- Setup Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<!-- Setup Spring MVC & REST, use Embedded …Run Code Online (Sandbox Code Playgroud) 我正在实现一个服务发现,并评估两个选项:Eureka 和 Consul。
帮我决定吧!我倾向于尤里卡,但我需要解决一个主要的技术问题。我的基础设施基于 openshift。我可以让多个容器在负载均衡器后面运行 Eureka 服务器。据我所知,每个服务器都需要相互通信。另外,Eureka主要与AWS一起使用......
(新手)问题:
1)如何配置每个Eureka Server相互通信?我有一个(负载平衡)URL。我担心每个服务器可能会变得不同步。
2)我错过了什么吗?
consul netflix-eureka spring-cloud-netflix spring-cloud-consul
netflix-eureka ×10
spring-boot ×4
java ×3
spring ×3
netflix-zuul ×2
spring-cloud ×2
consul ×1
integration ×1
netflix ×1
predix ×1
rest ×1
solr ×1
spring-mvc ×1