【发布时间】:2017-01-15 19:06:21
【问题描述】:
我似乎找不到以下场景的明确示例/解决方案;任何帮助/信息将不胜感激!
我有一个 Spring REST API 服务,它使用 Spring Data JPA 连接到后端数据库服务器。我在多台机器上运行这个完全相同的服务,并且我有一个反向代理,它将客户端请求(使用 Netflix Zuul)路由到这些 API 服务,以便访问数据库中的数据。但是,我想对请求进行负载平衡(通过反向代理和可能的 Netflix 功能区),以便每个请求仅发送到单个 API 服务器(以负载平衡的方式)。
Spring Data JPA 根据我定义的实体类和其余存储库自动配置端点。一种解决方案是在反向代理上为 API 服务上的每个端点生成一个等效端点,然后使用 Ribbon 客户端分别对每个端点进行负载平衡。但是,这似乎不是合适的解决方案。
我的问题是,Netflix Zuul 或 Ribbon 是否提供任何功能来处理这种情况?本质上,我希望能够设置一个 YAML 配置,它只是告诉 Zuul 使用功能区客户端并根据可用的 listOfServers 功能区配置自动将所有请求负载平衡到给定端点。
application.yml
例子:
DatabaseAPI:
ribbon:
eureka:
enabled: false
listOfServers: localhost:8080, localhost:8181, localhost:8282
ServerListRefreshInterval: 15000
zuul:
routes:
data:
path: /db/**
ServiceId: DatabaseAPI
现在,例如,我希望 /db/** 的每个请求都以循环方式发送到服务器列表中的一个可用服务器。注意:使用此示例配置,每个请求都会同时发送到所有可用服务器。我只希望其中一个接收每个请求。
【问题讨论】:
-
我也遇到了同样的难题,你找到解决办法了吗?
-
除了我在上面的问题中建议的有点不合理的可能解决方案之外,不,我还没有找到一个好的解决方案!我暂时把它放在一边,但我希望能尽快找到解决方案。
标签: spring rest jpa spring-boot load-balancing