使用REST API将Eureka用作注册表

时间:2015-11-14 05:43:13

标签: java spring rest spring-cloud netflix-eureka

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

最近,我们遇到了一个场景,我们有非Java应用程序组件(用C ++编写),它暴露了我们的许多Spring Boot Java应用程序将使用的3个REST服务端点。我们正在尝试查看C ++组件是否可以利用Eureka服务器的REST API在它出现时进行自我注册,以便Spring Boot Java应用程序可以通过Eureka执行常规查找以与C ++组件保持联系。 / p>

由于我无法在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/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"
}

OR(hostName的结果相同):

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

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

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

1 个答案:

答案 0 :(得分:12)

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

cancel操作的网址格式如下:

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

这是在Eureka REST operations页面上记录的方式,但对于<instanceId>应该是什么,几乎没有明确的说明。根据文档,<instanceId>是运行Eureka客户端的主机的主机名。这确实工作(IP地址或主机名)。我尝试传递GET网址给我的相同值(例如,192.168.55.55)或localhost。那也行不通。我还尝试从instanceId输出传递GET值(这与eureka.instance.metadataMap.instanceId属性的值相同)。那也没有用。我确实不得不尝试不同的组合来找到它。 <instanceId>是主机名和实例ID的串联,由:分隔。例如,192.168.55.55:foo-app-some-random-str

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

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

在这种情况下,cancel cURL命令如下所示:

$ 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 documentation修复此问题。

相关问题