Eureka和Ribbon是否适用于非spring引导应用程序?

Eureka和Ribbon是否适用于非spring引导应用程序?,spring,spring-cloud,netflix-eureka,spring-cloud-netflix,netflix-ribbon,Spring,Spring Cloud,Netflix Eureka,Spring Cloud Netflix,Netflix Ribbon,我正在重写一个Spring MVC系统 简单来说,系统是这样的: [网关后端服务数据库],其中网关是一个控制器,仅用于身份验证和将请求转发到后端服务 后端服务将被重构为微服务。我将使用Eureka服务为他们中的每一位进行注册。因此,最终架构将是:[Gateway Eureka Backend micro services Databases]。网关将从Eureka服务器查找注册表并调用micro服务 但是,网关不是spring引导应用程序(也不会被重写为spring引导),因此我不相信sprin

我正在重写一个Spring MVC系统

简单来说,系统是这样的: [网关后端服务数据库],其中网关是一个控制器,仅用于身份验证和将请求转发到后端服务

后端服务将被重构为微服务。我将使用Eureka服务为他们中的每一位进行注册。因此,最终架构将是:[Gateway Eureka Backend micro services Databases]。网关将从Eureka服务器查找注册表并调用micro服务

但是,网关不是spring引导应用程序(也不会被重写为spring引导),因此我不相信spring的eureka功能(@enableEurekClient、DiscoveryClient等)可以像示例那样轻易地采用。实际上,我尝试将eureka客户端注释添加到网关的控制器,这导致我的应用程序崩溃

此外,网关中需要功能区,以实现客户端负载平衡。但同样的担忧如上所述

//11月1日更新 我已经设置了一个Eureka服务器和一个客户端,它们都是用spring boot编写的。我正在使用这两个应用程序进行SpringMVC测试。服务器和客户端运行良好

服务器的配置应用程序。属性如下所示

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时,我可以看到客户机已注册

对于我的SpringMVCgateway,因为它不是SpringBoot项目,所以我将其复制到我的项目中,只是为了测试它是否可以连接到Eureka服务器并检索“sayHello”客户端的注册实例。不幸的是,在示例类的第76行打印了“无法从eureka获取示例服务的实例进行对话”这样的语句,它无法做到这一点

下面是放置在网关类路径中的eureka-client.properties。我可以确认客户端类正在读取配置文件

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)    
instanceInfo instanceInfo(id=234)
actionType null
appGroupName“未知”(id=246)
appName“网关EUREKACLIENT”(id=247)
asgName空
countryId 1
dataCenterInfo属性安装配置$1(id=248)
healthCheckExplicitUrl null
healthCheckRelativeUrl“/healthcheck”(id=253)
healthCheckSecureExplicitUrl null
healthCheckUrl“http://A156N7AB89AXNZQ:8761/healthcheck“(id=254)
主页URL“http://A156N7AB89AXNZQ:8761/“(id=255)
主机名“A156N7AB89AXNZQ”(id=256)
实例id“A156N7AB89AXNZQ”(id=256)
ipAddr“10.209.66.64”(id=257)
isCoordinatingDiscoveryServer布尔值(id=258)
IsInstanceInfoDirtyFalse
IsSecureReportEnabled false
不可移植的是真的吗
lastDirtyTimestamp长(id=260)
lastUpdatedTimestamp长(id=263)
leaseInfo leaseInfo(id=264)
元数据ConcurrentHashMap(id=266)
OverridedStatus InstanceInfo$InstanceStatus(id=267)
端口8761
secureHealthCheckUrl空
安全端口443
secureVipAddress空值
secureVipAddressUnresolved null
sid“na”(id=270)
状态InstanceInfo$InstanceStatus(id=271)
statusPageExplicitUrl null
statusPageRelativeUrl“/状态”(id=272)
状态页面URL“http://A156N7AB89AXNZQ:8761/Status“(id=273)
版本“未知”(id=274)
vipAddress“打招呼”(id=275)
未解决的“打招呼”(id=275)

我快没主意了。谁能帮忙解决这个问题吗

Ribbon()和Eureka()可以在没有Spring的情况下工作(这是它们最初开发的方式),但是您需要投入更多的精力来配置一切以满足您的需要。

Spring中对Ribbon和Eureka的支持是Spring云项目(和mvn组id)的一部分,而不是Spring Boot。我不认为开机是强制性的。Ribbon和Eureka本身由Netflix提供

对于ribbon,您仍然需要定义自己的@LoadBalancedRestTemplate@Bean@只要依赖项具有spring cloud eureka并且您的类是@Configuration类,EnableDiscoveryClient就应该可以工作


简而言之,为什么不试试快速测试呢?:)

使用netflix+docker进行微服务架构很抱歉,Eureka和Ribbon不是Spring云项目。它们(大部分)是由Netflix开发的。我正在尝试。但在连接到eureka服务器时遇到问题。用这个问题更新了帖子。你能看一下吗?Rafal G.-我的意思是Spring对Ribbon和Eureka的支持在云项目下,而不是Spring Boot项目下。我会更新我的答案。