当前位置: 首页 > 知识库问答 >
问题:

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

司马奇希
2023-03-14

我正在重写一个Spring MVC系统。

该系统简单地说是这样的:[Gateway<->Backend Services<->Databases],其中Gateway是一个控制器,只用于身份验证和将请求转发到后端服务。

后端服务将重构为微服务。我将使用尤里卡服务为他们每个人做登记。因此,最终的体系结构将是:[网关<->Eureka<->后端微服务<->数据库]。网关将从Eureka服务器查找注册表并调用微服务。

然而,网关不是spring boot应用程序(也不会被重写为spring boot),因此我不相信spring的eureka特性(@EnableEurekaclient、DiscoveryClient等)如例子所示,可以很容易地采用。实际上,我尝试将eureka客户端注释添加到Gateway的控制器中,这导致我的应用程序崩溃。

此外,网关中还需要Ribbon来实现客户端的负载平衡。但同样的担忧也如上。

//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 dashboard localhost:8761时,我可以看到客户端已经注册。

对于我的Spring MVC网关,由于它不是一个Spring Boot项目,所以我将该示例复制到我的项目中只是为了测试它是否可以连接到Eureka服务器并检索到注册的“say-hello”客户端的实例。不幸的是,它不能这样做,“不能得到一个实例的示例服务从Eureka talk to from Eureka”(打印在example类的第76行)。

下面是放置在Gateway类路径中的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

而且,这是new 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)    

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

共有1个答案

吴浩皛
2023-03-14

Ribbon(https://github.com/netflix/Ribbon)和Eureka(https://github.com/netflix/Eureka)可以在没有Spring的情况下工作(这也是它们最初的开发方式),但是您需要花更多的精力来配置所有的东西以满足您的需要。

 类似资料:
  • Ribbon是否缓存Eureka条目(以避免对每个请求进行服务查找),如果是,它在Spring Cloud中是如何配置的?例如,像这样的模拟客户端将如何配置条目/刷新率等的存活时间: } 我见过如下spring boot配置条目: 所以在这种情况下,缓存似乎每秒都会与Eureka检查更改,并允许每个条目缓存条目存活2秒IIUC?此外,就spring boot/spring cloud和Netfli

  • 我有一个带有嵌入式Jetty的Spring启动应用程序,需要使用JMX监控应用程序。 只要在我的windows开发环境中启动应用程序,我就可以使用jconsole访问JMX信息(jconsole提供了一个单独连接的过程)。但是,一旦使用以下参数将应用程序作为可执行jar运行,端口将不可用,我就无法与jconsole连接 netstat-tulpn既不返回端口9010也不返回端口9011,而且我无法

  • introduction 在上一篇中阐述了ribbon的基本用法,但是可以发现服务列表是通过配置得来的,实际 情况通常是由负载均衡+服务发现来实现的,通过服务发现获取服务列表,负载均衡通过rule选择要调用的服务。服务发现可以通过eureka来实现,后期会讲解利用consul做服务发现。 eureka discovery service eureka服务发现在前面的文章中已经提供到,这里直接给出代

  • 这启动了一个嵌入式tomcat,我可以看到我的控制器正在初始化,但是,当使用TestRestTemplate调用服务时,我得到了一个404。DispatcherServlet似乎不知道我的控制器 另外,我必须定义一个servletContainer bean,如下所示 Spring是否缺少任何配置来让嵌入式Tomcat可以看到我的控制器?我尝试在测试类上使用@enableAutoConfigura

  • 我想完成以下工作:Spring Boot应用程序中特定于环境的application.properties文件 在Spring非引导应用程序中。你知道怎么做吗?现在我正在设置环境变量来告诉应用程序要使用哪些属性,我更喜欢用“引导”的方式。 我们将不胜感激。

  • 我想使用Feign Client、Ribbon和Eureka实现一个弹性的微服务架构,所以我遇到了一个问题。当一个微服务目标关闭时,我希望重定向到另一个微服务实例,而不让用户看到它。例如,我有4个微服务B实例和一个实例A: