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

在没有负载平衡器的情况下,按Application.Properties中的服务名称为@FeignClient提供URL

贝成业
2023-03-14

我想使用Feign客户机,并按服务名称在application.properties中提供URL。

我使用Spring Boot,并且依赖于Spring Cloud:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
@SpringBootApplication
@EnableFeignClients
public class MyApplication {
    public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); }
}
@FeignClient(name = "some-service", url = "http://some-service.com/")
public interface SomeServiceClient {}

我知道如何对属性进行硬编码以从属性读取URL:

@FeignClient(name = "some-service", url = "${some-service.url}")
public interface SomeServiceClient {}

application.properties:

some-service.url=http://some-service.com/

这是一个更好的,但我想脱钩的财产名称与虚假客户端。我只想使用名称

@FeignClient(name = "some-service")
public interface SomeServiceClient {}
some-service.ribbon.listOfServers=http://some-service.com/
ribbon.eureka.enabled=false
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

这个解决方案似乎更好,因为代码中的Feign客户机只包含名称(没有URL或URL的耦合属性名称)。这正是我想要的。

但在日志中,我看到Spring/Ribbon为我运行负载平衡器:

2020-11-03 23:39:01.832  INFO 12168 --- [nio-8080-exec-2] c.netflix.config.ChainedDynamicProperty  : Flipping property: some-service.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
2020-11-03 23:39:01.892  INFO 12168 --- [nio-8080-exec-2] c.netflix.loadbalancer.BaseLoadBalancer  : Client: some-service instantiated a LoadBalancer: DynamicServerListLoadBalancer:{NFLoadBalancer:name=some-service,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:null
2020-11-03 23:39:01.908  INFO 12168 --- [nio-8080-exec-2] c.n.l.DynamicServerListLoadBalancer      : Using serverListUpdater PollingServerListUpdater
2020-11-03 23:39:01.955  INFO 12168 --- [nio-8080-exec-2] c.netflix.config.ChainedDynamicProperty  : Flipping property: some-service.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
2020-11-03 23:39:01.970  INFO 12168 --- [nio-8080-exec-2] c.n.l.DynamicServerListLoadBalancer      : DynamicServerListLoadBalancer for client some-service initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=some-service,current list of Servers=[jsonplaceholder.typicode.com:443],Load balancer stats=Zone stats: {unknown=[Zone:unknown;  Instance count:1;   Active connections count: 0;    Circuit breaker tripped count: 0;   Active connections per server: 0.0;]
},Server stats: [[Server:jsonplaceholder.typicode.com:443;  Zone:UNKNOWN;   Total Requests:0;   Successive connection failure:0;    Total blackout seconds:0;   Last connection made:Thu Jan 01 01:00:00 CET 1970;  First connection made: Thu Jan 01 01:00:00 CET 1970;    Active Connections:0;   total failure count in last (1000) msecs:0; average resp time:0.0;  90 percentile resp time:0.0;    95 percentile resp time:0.0;    min resp time:0.0;  max resp time:0.0;  stddev resp time:0.0]
]}ServerList:com.netflix.loadbalancer.ConfigurationBasedServerList@6a4bfe52

我不需要负载平衡器(我只有一个URL)。如何禁用它并始终获得ListofServers的第一个?也许有一种方法可以提供负载均衡器的自定义实现?或者至少为冗余负载均衡器禁用日志?

  • https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-feign.html
  • https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-ribbon.html

共有1个答案

邓鸿信
2023-03-14

我也面临着同样的问题,您是否按照EnableFeignClients使Spring无法加载上下文中的建议尝试了以下操作?

spring.main.allow-bean-definition-overriding=true
feign.client.config.some-service.url=http://some-service.com/
 类似资料:
  • 试图自学如何使用库伯内特斯,但有一些问题。 我的下一步是尝试使用LoadBalancer类型的服务来访问nginx。 我建立了一个新的集群并部署了nginx映像。 然后,我为LoadBalancer设置服务 设置完成后,我尝试使用LoadBalancer入口(我在描述LoadBalancer服务时发现)访问nginx。我收到一个此页面无法工作的错误。 不太确定我哪里出错了。 kubectl获得sv

  • 问题内容: 我想使用Amazon Elastic Load Balancer将WebSocket连接代理到多个node.js服务器。由于Amazon ELB不提供实际的WebSocket支持,因此我需要使用其原始的TCP消息传递。但是,我试图了解没有某种粘性会话功能的情况如何工作。 我了解WebSocket的工作方式是首先从客户端发送HTTP升级请求,服务器通过发送正确处理密钥身份验证的响应来处理

  • 因此,在单个节点上运行和扩展运行多个 Pod 的部署效果很好,并且当使用类型“nodePort”公开服务时,可以很好地平衡对该单个节点上多个 Pod 之间的虚拟 IP 的请求。 此后,我向我的集群添加了一个额外的节点,当使用nodePort公开服务,然后在2个节点上运行pods时,我当然需要具体指定每个主机,以访问在不同节点上的不同pods中运行的endpoint。 我想将请求发送到单个VIP,并

  • 我是微服务的新手。(学习阶段)。我有一个问题。我们在云中部署微服务。(例如 AWS)。云已经提供了负载平衡和日志。我们还在Spring Boot中实现了负载平衡(功能区)和日志(Rabbit MQ和Zipkin)。这两种实现有什么区别?我们两者都需要吗?有些人可以回答这些问题吗? 提前感谢。

  • 当我将服务与ClusterIP类型和2个POD一起使用时,流量分布在2个POD上。 我找到了另一种服务类型LoadBalancer。这两种服务的区别是什么?LoadBalancer与ClusterIP有何不同? 谢谢

  • 如果我想在服务器端使用Firebase,而不是使用快速和node.js的REST路由,我将如何处理缩放和负载平衡?例如,如果我有一个在服务器端使用Firebase的快速应用程序,那么每个旋转的服务器都会包含这些侦听器并对它们做出反应吗?在考虑到弹性负载平衡的情况下,在服务器端使用Firebase是否有可扩展的解决方案?