gpt4 book ai didi

spring-boot Autowired DiscoveryClient RestTemplate UnknownHostException

转载 作者:行者123 更新时间:2023-12-04 03:11:08 25 4
gpt4 key购买 nike

我正在使用 Spring 靴 1.3.3

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

编辑

我正在使用 Brixton.RC1 作为我的 Spring Cloud 依赖项
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Brixton.RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

我的应用程序是使用这些注释设置的:
@EnableDiscoveryClient
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

我有一个带有服务的休息 Controller :
@RestController
public class MyController {

@Autowired
private MyService myService;

在我的服务中,我尝试使用 Autowiring 的休息模板来调用另一个 Eureka 注册服务。
@Service
public class MyServiceImpl {

private final ParameterizedTypeReference<Answer> ANSWER = new ParameterizedTypeReference<Answer>() {};

@Autowired
private DiscoveryClient discoveryClient; //just here for testing

@Autowired
private RestTemplate restTemplate; //

public String someCoolMethod(String input){
log.info("Instance available? " + isInstanceAvailable());

final RequestEntity<String> requestEntity = RequestEntity.post(URI.create("http://myotherservice/othermethod")).accept(MediaType.APPLICATION_JSON).body(input);
final ResponseEntity<String> response = this.restTemplate.exchange(requestEntity, ANSWER);
log.info(response);
return response.getBody();
}

private Boolean isInstanceAvailable(){
List<ServiceInstance> instances = discoveryClient.getInstances("myotherservice");
for(ServiceInstance si : instances){
log.info(si.getUri().toString());
}
return instances.size() > 0;
}

}

我完全困惑,因为我在另一个项目中工作。这里也是输出:
INFO http://192.168.1.10:1234
INFO Instance available? true
ERROR I/O error on POST request for "http://myotherservice/othermethod": myotherservice; nested exception is java.net.UnknownHostException: myotherservice

所以我可以看到这两个服务都在 Eureka 注册。 MyService 能够:
  • 在 Eureka 注册
  • 查询 Eureka 的“myotherservice”
  • 使用正确的主机和端口
  • 获得有效响应

    但是 Autowiring 的 RestTemplate 正在抛出 UnknownHostException。

    最佳答案

    answer 是你需要创建一个 @Loadbalanced RestTemplate 作为 RC1。

    @Configuration
    public class MyConfiguration {

    @LoadBalanced
    @Bean
    RestTemplate restTemplate() {
    return new RestTemplate();
    }
    }

    关于spring-boot Autowired DiscoveryClient RestTemplate UnknownHostException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36458975/

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