几个月以来,我们一直在使用Eureka和我们的Spring Boot应用程序 . 我们已使用 @DiscoveryClient
注释在应用程序之间启用了服务查找 . 注册,续租和注销按预期进行 .
最近,我们遇到了一个场景,我们有非Java应用程序组件(用C编写),它暴露了我们的许多Spring Boot Java应用程序将使用的3个REST服务 endpoints . 我们正在尝试查看C组件是否可以利用Eureka服务器的REST API在它出现时进行自我注册,以便Spring Boot Java应用程序可以通过Eureka执行常规查找以与C组件保持联系 .
由于我不能在C组件中使用Eureka Client(显然),我开始使用Postman测试直接REST API(如here所述) . 通过使用POST方法向http://eurekaserver:8761/eureka/apps/FOO-APP发送JSON有效负载(使用instanceId = 1111和hostName = foo-app),注册工作没有任何问题 . 我可以查询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"
}
OR(hostName的结果相同):
{
"timestamp": 1447479397996,
"status": 404,
"error": "Not Found",
"message": "Not Found",
"path": "/eureka/apps/FOO-APP/foo-app"
}
我尝试了不同的组合,但我无法完成这项工作 . 我有一种感觉,我错过了一些明显的东西 - 可能是一些小事 . 任何有关这方面的帮助将不胜感激 .
PS: Eureka REST endpoints 文档在URL中提到"v2" . 但是,这在我的情况下不起作用 . 注册(适用于我)不使用"v2",如上所述 . 如果有人可以验证这一点,那也会有所帮助 . 这似乎没有足够的材料 .
1 回答
最后,我已经弄清楚如何使用Eureka服务器的REST URL调用
cancel
操作 . 这适用于Spring Cloud Eureka服务器,但也适用于Netflix Eureka服务器 .cancel
操作的URL模式如下:这是在Eureka REST operations页面上记录的方式,但是关于
<instanceId>
应该是什么的很清楚 . 根据文档,<instanceId>
是运行Eureka客户端的主机的 hostname . 那确实 not 工作(IP地址或主机名) . 我尝试传递GET
URL给我的相同值(例如,192.168.55.55)或localhost
. 那也行不通 . 我还尝试从GET
输出传递instanceId
值(这与eureka.instance.metadataMap.instanceId属性的值相同) . 那也没有用 . 我确实不得不尝试不同的组合来找到它 .<instanceId>
是主机名和实例ID的串联,由:
分隔 . 例如,192.168.55.55:foo-app-some-random-str
.这是列出在Eureka注册的活动实例的
GET
操作的示例输出:在这种情况下,
cancel
cURL命令将如下所示:这将按预期取消注册实例 .
That said, 我必须承认我没有太多关注Eureka服务器日志 . 当您注册Eureka客户端时,日志打印出实例的完全限定名称(
FOO-APP/192.168.55.55:foo-app-f4ea7b06fc03a05a06900713f7526a5d
),我可以将其用作我的猜测 .我希望有人在Eureka documentation修复此问题 .