问题标签 [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.
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()方法- 这会导致实例未注册 - 但我希望暂时暂停对该实例的服务)
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)
这就是我所拥有的:
- 在 cofig 服务器 application.yml 中:
- 在配置客户端中:
引导程序属性:
和 application.yml
- 尤里卡服务器:
应用程序.yml
引导程序.yml:
从异常来看,似乎是因为discoverClient不工作,配置有什么特别的吗?但是如果我从 gitHub 更改为本地文件存储进行配置,一切都很好。
提前感谢您的建议。
基于spring cloud文档,我是这样做的:
在配置服务器的 application.yml 中:
在 Eureka Server 的 application.yml 中:
在配置客户端的 application.yml 中:
但是,问题是在我启动 Eureka 配置服务器后,它很好,没有异常,但是在我启动配置客户端后,我得到了同样的异常:
谁能告诉我我的错误在哪里?这只发生在使用 GIT 作为配置服务器数据源时,但在本地文件数据源中,没有发生错误。
谢谢
这些是我尝试解决关键问题的步骤,但又失败了:
从 Oracle 下载“Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files”,然后按照说明进行安装(基本上将 JRE lib/security 目录中的 2 个策略文件替换为您下载的文件)。
现在如果我运行 spring encrypt mysecret --key foo ,它是成功的,这意味着 JCE 安装正确;
创建用于测试的密钥库:使用此: https ://github.com/spring-cloud/spring-cloud-config/blob/master/docs/src/main/asciidoc/spring-cloud-config.adoc#creating-用于测试的密钥存储
在我的配置服务器中更新 application.yml 后,application.yml 是这样的:
将此添加到 eureka 服务器和配置客户端 application.yml:
加密:密钥:abc
运行一切:结果是同样令人讨厌的错误
那么我的测试出了什么问题?谢谢你的帮助
这是我的错:将 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
谢谢
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。
谢谢
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
spring-cloud - 如何在 Spring Cloud 中从客户端配置多个 Eureka 服务器
从 spring 文档中,我看到我们可以一起拥有对等 eureka 服务器,所以对于 Eureka1,在 application.yml 中,我可以拥有:
在 Eureka Server 2 中,我可以拥有:
现在这两个eureka server 互相认识了,很好。但是,现在在配置客户端时,当他们再次注册 Eureka 时,该怎么做?
在我的客户端应用程序中,我有:
所以现在我的问题是我应该在客户端 application.yml 中使用 peer1 还是 peer2 作为 EurekaServerHost?
谢谢
java - 如何以编程方式访问 spring.application.instance_id?
我的 Spring Boot/Cloud 应用程序的“applicationname.yml”文件中有以下内容。如何在我的 java 代码中获取 spring.application.instance_id 的值?这个“applicationname.yml”文件托管在“Spring Cloud Config Server”中。
我有一个 java 类,我试图使用 @Value 注释访问这个变量的值,它给了我一个错误。这是我必须获取并打印 java 类中的值
错误信息:
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 个工具中的任何一个的任何可行答案都很感兴趣。
spring - 创建自定义 Zuul 过滤器
我想为我的 Zuul 代理实现自定义过滤器。现在,我知道这里有很多关于这个主题的讨论,我查看了提供的答案,其中包含过滤器示例和 Spring Cloud 文档,我已经阅读了好几次。我试图复制一些过滤器内容以供我使用,但它不起作用。
我有一个 Eureka 服务器,注册了 3 个独立的服务,其中一个是另外两个的前门,从每个服务中收集信息并检索它。
我想要做的是重新路由 Zuul 在流程开始时收到的请求,通过特定服务重定向它们,使用 URL 参数来确定应该针对哪个流程而不是另一个流程。我已经创建了一个带有@Component
注释标记的过滤器,实现ZuulFilter
. 我不知道如何使重定向起作用,以及使用哪些方法。
所以,问题是:如何使用 URL 参数将传入请求重定向到不同的注册服务?
amazon-web-services - 如何使用 AWS Beanstalk 和 Spring Cloud Netflix 在 Docker 容器之间建立连接
我的应用程序由几个微服务组成。我想使用 NetFlix Eureka 作为发现服务器,并且我想将我的应用程序部署为 Docker 容器。我想在我的服务之间建立通信,但是有几个问题:
- Beanstalk 始终使用 nginx 作为容器的反向代理,默认情况下将所有请求路由到端口 80。好吧,我已经使用一些棘手的脚本解决了这个问题。
- 我的 EC2 Beanstalk 实例上有几个网络接口 - docker0 是 docker 的桥接器,eth0 是主机 IP。问题是,我无法动态确定容器内的主机 IP 地址,因此我无法在没有硬编码的情况下将其传递给 Eureka 发现服务器(也作为 Docker 映像运行)。使用代码或配置,我只能公开内部 Docker 接口而不是桥接。
所以,底线 - 我想使用 Docker、Beanstalk 和 Eureka 构建支持微服务的应用程序。解决方案应该是可扩展的,并且除了 Eureka 主机 IP 之外不应该有任何硬编码值。
谢谢。
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 引入的类。