使用来自发现的 ServiceID 而不是目录主机的微服务之间的通信?

Communication between microservice using ServiceID from discovery instead of directory host?

我是新的微服务,我正在阅读一些关于发现服务器的示例,我看到我们可以使用 url 调用另一个微服务 api,例如: http://inventory-service/api/inventory/{productCode}。 "inventory-service"是我在discovery中注册的一个服务实例。 所以我的问题是使用 serviceId 而不是调用目录的好处是什么 host:port: http://localhost:9009/api/inventory/{productCode}.

假设您通过在 src/main/resources/bootstrap.properties.

中配置 Eureka serviceUrl 来向 Eureka 服务器注册 inventory-service
 spring.application.name=inventory-service
 eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

然后构建 inventory-service 并通过 运行 按照命令启动它的 2 个实例。

 java -jar -Dserver.port=9001 target/inventory-service-0.0.1-SNAPSHOT-exec.jar

 java -jar -Dserver.port=9002 target/inventory-service-0.0.1-SNAPSHOT-exec.jar

当您访问 Eureka 仪表板时 http://localhost:8761/ 您将看到 2 个已注册的库存服务实例。

如果您想从您的消费者应用程序应用 Client Load Balancing,您需要这样的配置:

 server.ribbon.listOfServers=localhost:9001,localhost:9002 
 server.ribbon.eureka.enabled=false

如果您想启动新实例,您需要在您的消费者配置中注册它们。

有了 ServiceID,您就不必担心了,因为所有实例都将使用相同的标识符进行注册。它将自动添加到可用列表中 servers.It 是使用 ServiceId 而不是 hostname

的优点之一