问题标签 [netflix-eureka]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1410 浏览

spring-cloud - 使用 spring cloud netflix (Eureka) 将实例状态更改为 OUT_OF_SERVICE

Spring Cloud 应用程序被记录为具有以下端点:

/pause 和 /resume 用于调用 Lifecycle 方法(ApplicationContext 上的 stop() 和 start())

我怀疑这将是在 eureka 中将实例标记为 OUT_OF_SERVICE 的方式,因为 EurekaDiscoveryClientConfiguration 中的代码是一个实现SmartLifecycle的弹簧类:

但是,当我 POST 到 /pause 端点时,我得到一个 200 响应代码(值为 'true'),但上述代码从未执行。

也许我不明白一些事情。如果是这样,我如何触发上述代码使实例停止服务?

(当我关闭实例时会调用EurekaDiscoveryClientConfiguration类的close()方法- 这会导致实例未注册 - 但我希望暂时暂停对该实例的服务)

0 投票
0 回答
1269 浏览

spring-cloud - 使用带有 git 的 spring 配置服务器导致安全组问题

我现在正在尝试设置使用 spring config server / spring config client 和 eureka server 一起进行服务发现。当我使用本地文件系统保存配置时,一切都很好,但是当我更改为 gitHub 保存配置时,我无法启动 spring config 客户端,并收到以下错误消息:

com.netflix.discovery.DiscoveryClient : Can't get a response from http://user :{cipher}AQBdTe9vjgOqANyfi+Ke5HYmhFJnuvsGJ+8FOqLgdMdFInJkVRzy9XngylNp9KlX2lwPI13jT7ceDjBs9w4B6A15akQTHHP1q9rWwMcLtVCCKGFgvXSgQF+WWIItxBmIDGG4bSgDYZ6XQWl66T84PxjTBygErpmAjn+X2BWdtWtVmjXzpMQMaHGpiyLPoGIQYF4j9ZGpl16Jx79+j6et6LStksrT3WxQuanhZwIkqZ827+2mlUB3kd5ocW7R0vC3JMGVZlGNfqYQwJIhSJ19lrq4gxm/zbGroYonW3QSHTiRlhlvOdovEua/0dCl6+s0iEHYZCBllr7jikEWmS5Px7U2TG8/eQkjR8pUbSN6OE+OI2ZZUCNOT+mi75ZeeN1OtdQ= @localhost:8761/eureka/null

无法联系任何 eureka 节点 - 可能是安全组问题?

java.lang.IllegalArgumentException: Illegal character in authority at index 7: http://user :{cipher}AQBdTe9vjgOqANyfi+Ke5HYmhFJnuvsGJ+8FOqLgdMdFInJkVRzy9XngylNp9KlX2lwPI13jT7ceDjBs9w4B6A15akQTHHP1q9rWwMcLtVCCKGFgvXSgQF+WWIItxBmIDGG4bSgDYZ6XQWl66T84PxjTBygErpmAjn+X2BWdtWtVmjXzpMQMaHGpiyLPoGIQYF4j9ZGpl16Jx79+j6et6LStksrT3WxQuanhZwIkqZ827+2mlUB3kd5ocW7R0vC3JMGVZlGNfqYQwJIhSJ19lrq4gxm/zbGroYonW3QSHTiRlhlvOdovEua/0dCl6+s0iEHYZCBllr7jikEWmS5Px7U2TG8/eQkjR8pUbSN6OE+OI2ZZUCNOT+mi75ZeeN1OtdQ=@本地主机:8761/eureka/ 在 java.net.URI.create(URI.java:852)

这就是我所拥有的:

  1. 在 cofig 服务器 application.yml 中:
  1. 在配置客户端中:

引导程序属性:

和 application.yml

  1. 尤里卡服务器:

应用程序.yml

引导程序.yml:

从异常来看,似乎是因为discoverClient不工作,配置有什么特别的吗?但是如果我从 gitHub 更改为本地文件存储进行配置,一切都很好。

提前感谢您的建议。

基于spring cloud文档,我是这样做的:

在配置服务器的 application.yml 中:

在 Eureka Server 的 application.yml 中:

在配置客户端的 application.yml 中:

但是,问题是在我启动 Eureka 配置服务器后,它很好,没有异常,但是在我启动配置客户端后,我得到了同样的异常:

谁能告诉我我的错误在哪里?这只发生在使用 GIT 作为配置服务器数据源时,但在本地文件数据源中,没有发生错误。

谢谢

这些是我尝试解决关键问题的步骤,但又失败了:

  1. 从 Oracle 下载“Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files”,然后按照说明进行安装(基本上将 JRE lib/security 目录中的 2 个策略文件替换为您下载的文件)。

  2. 现在如果我运行 spring encrypt mysecret --key foo ,它是成功的,这意味着 JCE 安装正确;

  3. 创建用于测试的密钥库:使用此: https ://github.com/spring-cloud/spring-cloud-config/blob/master/docs/src/main/asciidoc/spring-cloud-config.adoc#creating-用于测试的密钥存储

  4. 在我的配置服务器中更新 application.yml 后,application.yml 是这样的:

  1. 将此添加到 eureka 服务器和配置客户端 application.yml:

    加密:密钥:abc

  2. 运行一切:结果是同样令人讨厌的错误

那么我的测试出了什么问题?谢谢你的帮助

这是我的错:将 application.yml 更改为:

然后使用此命令生成完全解决问题的文件:

keytool -genkeypair -alias mytestkey -keyalg RSA \ -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" \ -keypass changeme -keystore server.jks -storepass letmein

谢谢

0 投票
1 回答
329 浏览

spring-cloud - Spring Cloud Sidecar 关闭后无法注销 nodeJS 服务

我怀疑这是一个问题,有人可以帮忙检查一下吗?

在我的 sideCar 应用程序中,我有 application.yml:

在我的主要 spring 配置应用程序中,我有:

现在我启动我的 nodeJS 服务器,我在 spring 应用程序中:

nodeService 的 url 是:http://SJCC02MT0NUFD58.local:3000/

这是完美的,但是在我关闭我的 nodeJS 服务器后, http://localhost:3000/app/health.json url 完全关闭了,但是,在主 java spring 应用程序中,我仍然在那里看到相同的输出。

因此,即使 NodeJS 服务不再可用,eureka 仍然会在内存中记住这一点。

我的配置有什么问题吗?

另一个问题是为什么 spring 发现的 url 是http://SJCC02MT0NUFD58.local:3000/,而不是http://localhost:3000?我已经将 Eureka.server.instance.host 配置为 localhost。

谢谢

0 投票
1 回答
911 浏览

spring-boot - 将请求路由到注册为两个不同服务 ID 的同一服务

在我的 Spring Boot 应用程序中,我使用 Eureka 服务器作为发现服务。在我的一个 Discovery 客户端应用程序中,我使用 zuul 代理将请求路由到在 Discovery Server 注册的不同服务。

我有一个资源应用程序负责将数据存储到数据库中。我为这个服务创建了两个实例,注册为两个不同的服务与发现服务。为该服务发布的 api 可以说是 /resources Get、Post 等

客户端应用程序为此资源服务的两个实例发送像 /definitions 和 /locations 这样的请求。

现在我的问题是我想将此 /definitions 映射到 service-id 1/resources 并将位置映射到 /service-id2/resources。

我不确定如何执行此操作,因为当我从客户端应用程序发送 /defnitions 时,它期望 /definitions 在资源应用程序中存在,但事实并非如此。

我正在尝试这样的事情 zuul: routes: locations: path: /locations/** rewrite: /resources/** serviceId: location_service stripPrefix: false definitions: path: /definitions/** rewrite: /resources/** serviceId: definition_service stripPrefix: false

0 投票
1 回答
36471 浏览

spring-cloud - 如何在 Spring Cloud 中从客户端配置多个 Eureka 服务器

从 spring 文档中,我看到我们可以一起拥有对等 eureka 服务器,所以对于 Eureka1,在 application.yml 中,我可以拥有:

在 Eureka Server 2 中,我可以拥有:

现在这两个eureka server 互相认识了,很好。但是,现在在配置客户端时,当他们再次注册 Eureka 时,该怎么做?

在我的客户端应用程序中,我有:

所以现在我的问题是我应该在客户端 application.yml 中使用 peer1 还是 peer2 作为 EurekaServerHost?

谢谢

0 投票
2 回答
8220 浏览

java - 如何以编程方式访问 spring.application.instance_id?

我的 Spring Boot/Cloud 应用程序的“applicationname.yml”文件中有以下内容。如何在我的 java 代码中获取 spring.application.instance_id 的值?这个“applicationname.yml”文件托管在“Spring Cloud Config Server”中。

我有一个 java 类,我试图使用 @Value 注释访问这个变量的值,它给了我一个错误。这是我必须获取并打印 java 类中的值

错误信息

0 投票
2 回答
2199 浏览

apache-zookeeper - Consul 等配置工具如何向客户端“推送”配置更新?

Chef/Puppet/Ansible 等传统的“静态”配置管理工具中剥离全局状态,转而将配置存储在一些集中/分布式工具中,其中主要参与者似乎是:

  • 动物园管理员(阿帕奇)
  • 领事(Hashicorp)
  • 尤里卡 (Netflix)

这些工具中的每一个都有不同的工作方式,但原理是相同的:

  • 将您的环境变量和其他动态配置(即,可能会更改的内容)作为键/值对存储在这些工具中
  • 在启动时通过客户端连接到这些工具/服务并下拉配置 KV 对。这通常需要客户端提供服务名称(“ MY_APP”)和环境(“ DEV”、“ PROD”等)。

有一个出色的 Consul Java 客户端,它精美地解释了所有这些,并提供了充足的代码示例。

这些工具的理解是,它们建立在诸如 Zab、Paxos 和 Gossip 等共识算法之上,这些算法允许配置更新几乎像病毒一样传播,并最终保持一致性,遍及您的节点。所以这里的想法是,如果你有一个myapp有 20 个节点的应用程序,比如说myapp01通过myapp20,如果你对其中一个节点进行配置更改,那么该更改将在几秒/分钟的时间内自然地“传播”到 20 个节点。

我的问题是:这些更新实际上是如何部署到每个节点的?在所有客户端 API(我在上面链接的那个,ZooKeeper API 或 Eureka API)中,我都没有看到某种可以设置并用于在集中式服务(例如 Consul)时通知客户端的回调功能集群)想要推送和重新加载配置更新。

所以我问:这应该如何工作(动态配置部署和客户端重新加载)?尽管 Consul 的 API 似乎是最先进的恕我直言,但我对这 3 个工具中的任何一个的任何可行答案都很感兴趣。

0 投票
1 回答
7543 浏览

spring - 创建自定义 Zuul 过滤器

我想为我的 Zuul 代理实现自定义过滤器。现在,我知道这里有很多关于这个主题的讨论,我查看了提供的答案,其中包含过滤器示例和 Spring Cloud 文档,我已经阅读了好几次。我试图复制一些过滤器内容以供我使用,但它不起作用。

我有一个 Eureka 服务器,注册了 3 个独立的服务,其中一个是另外两个的前门,从每个服务中收集信息并检索它。

我想要做的是重新路由 Zuul 在流程开始时收到的请求,通过特定服务重定向它们,使用 URL 参数来确定应该针对哪个流程而不是另一个流程。我已经创建了一个带有@Component注释标记的过滤器,实现ZuulFilter. 我不知道如何使重定向起作用,以及使用哪些方法。

所以,问题是:如何使用 URL 参数将传入请求重定向到不同的注册服务?

0 投票
1 回答
956 浏览

amazon-web-services - 如何使用 AWS Beanstalk 和 Spring Cloud Netflix 在 Docker 容器之间建立连接

我的应用程序由几个微服务组成。我想使用 NetFlix Eureka 作为发现服务器,并且我想将我的应用程序部署为 Docker 容器。我想在我的服务之间建立通信,但是有几个问题:

  1. Beanstalk 始终使用 nginx 作为容器的反向代理,默认情况下将所有请求路由到端口 80。好吧,我已经使用一些棘手的脚本解决了这个问题。
  2. 我的 EC2 Beanstalk 实例上有几个网络接口 - docker0 是 docker 的桥接器,eth0 是主机 IP。问题是,我无法动态确定容器内的主机 IP 地址,因此我无法在没有硬编码的情况下将其传递给 Eureka 发现服务器(也作为 Docker 映像运行)。使用代码或配置,我只能公开内部 Docker 接口而不是桥接。

所以,底线 - 我想使用 Docker、Beanstalk 和 Eureka 构建支持微服务的应用程序。解决方案应该是可扩展的,并且除了 Eureka 主机 IP 之外不应该有任何硬编码值。

谢谢。

0 投票
2 回答
1254 浏览

gradle - 使用 gradle 运行测试时如何排除 jersey 1.x 依赖项

我们有一个依赖于 Netflix 的 Eureka 的 Web 服务项目,它依赖于 Jersey 客户端 1.x。

我们的项目正在使用 gradle,在项目中我们有我们的 src、单元、集成和功能测试。对于我们的功能测试,我们在 testCompile gradle 部分中导入了一个 jar,它包装了 Jersey 客户端以向 Web 服务发送请求。

现在我的问题是如何在 testCompile 中忽略 netflix Jersey 客户端依赖项,以便可以使用新的 Jersey 2.x 客户端进行功能测试?

构建脚本如下:

主要服务构建脚本摘录:

服务测试客户端相关部分:

来自 github 的 Eureka Client gradle 脚本的相关部分:

通过上述设置,我得到方法未找到错误,因为当测试运行时,一些 jersey 1.x 类优先于测试客户端 jar 引入的类。