9

几个月来,我们一直在使用 Eureka 和 Spring Boot 应用程序。我们已经使用@DiscoveryClient注释在应用程序之间启用了服务查找。注册、续租和注销都按预期进行。

最近,我们遇到了一个场景,我们有非 Java 应用程序组件(用 C++ 编写),它公开了我们的许多 Spring Boot Java 应用程序会使用的 3 个 REST 服务端点。我们正在尝试查看 C++ 组件是否可以利用 Eureka 服务器的 REST API 来注册自己,以便 Spring Boot Java 应用程序可以通过 Eureka 执行通常的查找以与 C++ 组件取得联系。

由于我不能在 C++ 组件中使用 Eureka 客户端(显然),我开始使用 Postman测试直接 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/1111http://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"
}

或(主机名的结果相同):

{
  "timestamp": 1447479397996,
  "status": 404,
  "error": "Not Found",
  "message": "Not Found",
  "path": "/eureka/apps/FOO-APP/foo-app"
}

我尝试了不同的组合,但我无法完成这项工作。我有一种感觉,我错过了一些明显的东西——可能是一些小东西。对此的任何帮助将不胜感激。

PS: Eureka REST 端点文档在 URL 中提到了“v2”。但是,这在我的情况下不起作用。注册(对我有用)不使用如上所述的“v2”。如果有人可以验证这一点,那也会有所帮助。似乎没有足够的材料来说明这一点。

4

1 回答 1

16

最后,我弄清楚了如何cancel使用 Eureka 服务器的 REST URL 调用该操作。这适用于 Spring Cloud Eureka 服务器,但也适用于 Netflix Eureka 服务器。

cancel操作的 URL 模式如下:

DELETE http://eureka_host:eureka_port/eureka/apps/<appName>/<instanceId>

这就是Eureka REST 操作<instanceId>页面上记录的方式,但对于应该是什么却没有多少明确性。根据文档,<instanceId>是运行 Eureka 客户端的主机的主机名。不起作用(IP地址或主机名)。我尝试传入 URL 给我的相同值GET(例如,192.168.55.55)或localhost. 那也没有用。我还尝试instanceIdGET输出中传入值(与 eureka.instance.metadataMap.instanceId 属性的值相同)。那也行不通。我真的不得不尝试不同的组合才能找到答案。<instanceId>是主机名和实例 ID 的串联,由:. 例如,192.168.55.55:foo-app-some-random-str

GET以下是列出在 Eureka 中注册的活动实例的操作的示例输出:

<instance>
  <hostName>192.168.55.55</hostName>
  <app>FOO-APP</app>
  ...
  <metadata>
    <instanceId>foo-app-f4ea7b06fc03a05a06900713f7526a5d</instanceId>
  </metadata>
  ...
</instance>

在这种情况下,cancelcURL 命令将如下所示:

$ curl -X "DELETE" http://eureka_host:eureka_port/eureka/apps/FOO-APP/192.168.55.55:foo-app-f4ea7b06fc03a05a06900713f7526a5d

这将按预期取消注册实例。

也就是说,我必须承认我并没有过多关注 Eureka 服务器日志。当您注册 Eureka 客户端时,日志会打印出实例的完全限定名称 ( FOO-APP/192.168.55.55:foo-app-f4ea7b06fc03a05a06900713f7526a5d),我可以将其用作我的猜测。

我希望有人在Eureka 文档中解决这个问题。

于 2015-12-16T19:18:22.870 回答