精通 springcloud:服务发现,Eureka API,java 技术上难以解决的问题
client:
serviceUr1:
de faultZone:
http://localhost:8762/eureka/ , http://localhost:8763/eureka/
server:
port: ${PORT:8761}
---
spring:
profiles: peer2
eureka :
instance :
hos tname: peer2
metadataMap:
zone: zone2
client:
serviceUrl :
defaultZone:
http://localhost:8761/eureka/,http://localhost:8763/eureka/
server:
port: ${PORT:8762 }
spring:
profiles: peer3
eureka:
instance:
hostname: peer3
metadataMap :
zone: zone3
client:
serviceUrl:
de faultZone :
http://localhost:8761/eureka/ ,http://localhost:8762/eureka/
server:
port: ${PORT:8763}
在使用不同的配置文件名运行所有 3 个 Eureka 实例后,我们就已经创建了一个本地发现集群。如果在启动后查看任何实例的 Eureka 仪表板,那么它看起来始终是一样的,我们可以看到 3 个 DISCOVERY-SERVICE 实例,如图 4.8 所示。
下一步是运行客户端应用程序。项目中的配置设置与使用 Eureka Server 的应用程序的配置设置非常相似。defaultZone 字段中提供的地址顺序决定了对不同发现服务的连接尝试的顺序。如果无法建立与第一个服务器的连接,那么它将尝试从列表中连接第二个服务器,以此类推。与前文所述一 样, 开发人员应该设置 VM 参数 Dspring.profiles active =zone[n]来选择正确的配置文件。这里还建议设置-Xmx192m 参数。请记住,我们要在本地测试所有服务,如果没有为 Spring Cloud 应用程序设置任何内存限制,则启动后消耗大约 350MB 的堆,并且总的内存使用大约为 600MB。除非计算机上有大量内存,否则很难在本地机器上运行多个微服务实例。
spring:
profiles: zone1
eureka:
client:
serviceUrl:
defaultZone:
http://localhost:8761/eureka/. http://localhost:8762/eureka/ , http://1ocalhost:
8763/eureka/
server:
port: $(PORT:80817
spring:
profiles: zone2
eureka:
client:
serviceUrl:
defaultZone:
http://1ocalhost:8762/eureka/.http://localhost:8761/eureka/ , http://localhost:
8763/eureka/
server :
port: ${PORT:8082}
spring:
profiles: zone3
e
ureka:
client:
serviceurl:
defaultZone:
http://localhost:8763/eureka/ , http://localhost: 8761/eureka/,http://localhost:
8762/eureka/
server:
port: ${PORT:8083}
现在再来看一下 Eureka 仪表板。尽管应用程序最初只连接到发现服务的一个实例,但我们在任何地方都注册了 3 个客户端服务实例。无论进入哪个发现服务实例的仪表板,结果都是相同的。这就是该练习的确切目的。现在可以创建一些额外的实现以证明一切都已如预期一样工作,如图 4.9 所示。
客户端应用程序除了将打印所选配置文件名称的 REST 端点公开之外并无其他操作。配置文件名称指向特定应用程序实例的主发现服务实例。以下 @RetController 实现非常简单,它将打印当前区域的名称。
eRestController
public class ClientController {
@Value ("S {spring.profiles}")
private String zone;
@GetMapping("/ping")
public String ping() {
return "I'm in zone”+ zone;
最后,开发人员可以继续实现 API 网关。当然,详细介绍 Zuul、Netlix 的 API 网关和路由器提供的功能超出了本章的范围( 后续章节将对此展开详细的讨论)。Zuul 现在将有助于测试我们的示例解决方案,因为它能够检索在发现服务器中注册的服务列表,并在客户端应用程序的所有正在运行的实例之间执行负载均衡。正如以下配置片段所示,开发人员可以使用侦听端口 8763 的发现服务器。所有包含/api/clien/**路径的传入请求都将路由到 client-service.
评论