我正在重写一个Spring MVC系统。
系统就像这样简单: [网关< - >后端服务< - >数据库] ,其中Gateway是一个控制器,仅用于身份验证并将请求转发给后端服务。
后端服务将重构为微服务。我将使用Eureka服务为每个人进行注册。所以最终架构将是: [Gateway< - >尤里卡< - >后端微服务< - >数据库] 即可。网关将从Eureka服务器中查找注册表并调用微服务。
但是,Gateway不是一个Spring启动应用程序(并且不会被重写为Spring启动),因此我不相信Spring的eureka功能(@EnableEurekaClient,DiscoveryClient等)可以像例子那样容易采用。实际上我尝试将eureka客户端注释添加到Gateway的控制器中,这导致我的应用程序崩溃。
此外,网关中还需要功能区以进行客户端负载平衡。但同样的担忧如上。
// 11月1日更新 我已经设置了一个Eureka服务器和一个客户端,两者都是用spring boot编写的。我正在使用这两个应用程序进行Spring MVC测试。服务器和客户端运行良好。
服务器的配置application.properties 如下所示
server.port=8761
spring.application.name=service-itself
eureka.client.service-url.default-zone=http://localhost:8761/eureka/
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=false
logging.level.com.netflix.eureka=OFF
logging.level.com.netflix.discovery=OFF
客户端如下:application.yml
spring:
application:
name: say-hello
server:
port: 8090
eureka:
client:
service-url:
defaultZone: http://${eureka.host:localhost}:${eureka.port:8761}/eureka/
访问Eureka仪表板localhost:8761时,我可以看到该客户端已注册。
对于我的Spring MVC网关,因为它不是Spring启动项目,所以我将example复制到我的项目只是为了测试它是否可以连接到Eureka服务器并检索注册的&#实例34;说问候"客户。不幸的是,它无法通过说"无法获得示例服务的实例与eureka"在示例类的第76行打印。
这是位于网关类路径中的eureka-client.properties。我可以确认Client类正在读取配置文件。
eureka.name=gatewayEurekaClient
eureka.vipAddress=say-hello
eureka.port=8761
eureka.preferSameZone=true
eureka.preferSameZone=true
eureka.shouldUseDns=false
eureka.serviceUrl.default=http://localhost:8761/eureka
eureka.serviceUrl.defaultZone=http://localhost:8761/eureka
此外,这是新DiscoveryClient(applicationInfoManager,clientConfig); 正在执行时的调试信息
instanceInfo InstanceInfo (id=234)
actionType null
appGroupName "UNKNOWN" (id=246)
appName "GATEWAYEUREKACLIENT" (id=247)
asgName null
countryId 1
dataCenterInfo PropertiesInstanceConfig$1 (id=248)
healthCheckExplicitUrl null
healthCheckRelativeUrl "/healthcheck" (id=253)
healthCheckSecureExplicitUrl null
healthCheckUrl "http://A156N7AB89AXNZQ:8761/healthcheck" (id=254)
homePageUrl "http://A156N7AB89AXNZQ:8761/" (id=255)
hostName "A156N7AB89AXNZQ" (id=256)
instanceId "A156N7AB89AXNZQ" (id=256)
ipAddr "10.209.66.64" (id=257)
isCoordinatingDiscoveryServer Boolean (id=258)
isInstanceInfoDirty false
isSecurePortEnabled false
isUnsecurePortEnabled true
lastDirtyTimestamp Long (id=260)
lastUpdatedTimestamp Long (id=263)
leaseInfo LeaseInfo (id=264)
metadata ConcurrentHashMap<K,V> (id=266)
overriddenstatus InstanceInfo$InstanceStatus (id=267)
port 8761
secureHealthCheckUrl null
securePort 443
secureVipAddress null
secureVipAddressUnresolved null
sid "na" (id=270)
status InstanceInfo$InstanceStatus (id=271)
statusPageExplicitUrl null
statusPageRelativeUrl "/Status" (id=272)
statusPageUrl "http://A156N7AB89AXNZQ:8761/Status" (id=273)
version "unknown" (id=274)
vipAddress "say-hello" (id=275)
vipAddressUnresolved "say-hello" (id=275)
我已经没想完了。任何人都可以帮忙解决这个问题吗?
答案 0 :(得分:3)
功能区(https://github.com/Netflix/ribbon)和Eureka(https://github.com/Netflix/eureka)可以在没有Spring的情况下工作(这就是它们首先开发的方式),但您需要花费更多精力进行配置一切都符合您的需求。
答案 1 :(得分:1)
在Spring中支持Ribbon和Eureka是Spring Cloud项目(和mvn组ID)的一部分,而不是Spring Boot。我不认为启动是强制性的。 Ribbon和Eureka本身由Netflix提供。
对于功能区,无论如何都需要定义自己的@LoadBalanced RestTemplate @Bean。 @EnableDiscoveryClient应该可以工作,只要依赖项有spring cloud eureka,你的类是@Configuration类。
简短的回答是 - 为什么不尝试快速测试? :)