gpt4 book ai didi

java - 使用 Spring Cloud 从微服务访问外部 IP

转载 作者:搜寻专家 更新时间:2023-11-01 02:05:26 24 4
gpt4 key购买 nike

我正在尝试从我的一个微服务中访问外部服务。我将 Spring Cloud、Eureka 用于注册表,将 Spring boot 作为主要框架。

Map<String, String> urlVariables = new HashMap<>();
urlVariables.put("ip_address", IP);
urlVariables.put("port", PORT);

ResponseObject state =
restTemplate.getForObject("http://{ip_address}:{port}/state/", ResponseObject.class, urlVariables);

据我所知,Spring Cloud 将 Ribbon 作为 Rest 模板的 HTTP 客户端注入(inject),当我尝试访问此 IP(例如:193.172.x.x)时,它会产生以下错误:

java.lang.IllegalStateException: No instances available for 193.172.x.x at org.springframework.cloud.netflix.ribbon.RibbonClientHttpRequestFactory.createRequest(RibbonClientHttpRequestFactory.java:64) at org.springframework.http.client.support.HttpAccessor.createRequest(HttpAccessor.java:76) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:567) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:540) at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:247)

看起来 Ribbon 正在尝试查找具有该名称的微服务实例,而不是向外查找。有什么方法可以配置 Ribbon 来查找外部 IP,还是仅供内部使用?

最佳答案

您正在注入(inject) @LoadBalanced 版本的 RestTemplate。您必须确保您的 RestTemplate 是普通的模板。您可以使用 new RestTemplate() 创建它。如果它是一个 bean,只需添加一个限定符以确保您正在注入(inject)正确版本的 RestTemplate

关于java - 使用 Spring Cloud 从微服务访问外部 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35840281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com