Spring boot/Cloud Eureka DiscoveryClient - 不知道这样的主机

Spring boot/Cloud Eureka DiscoveryClient - No such host is known

我想尝试使用 2.5.4 spring 启动的微服务并在发现中遇到问题

步骤:

使用@LoadBalanced 创建了一个 RestTemplate,并尝试使用“url 中的应用程序名称”调用该服务

我在属性中设置了 register 和 fetch registry true(认为这应该可以获得可用服务?)

Error: No such host is known

我正在尝试

@Autowired
private DiscoveryClient discoveryClient;

并做

 discoveryClient.getInstances("myappservice-name").forEach((ServiceInstance s) -> {
            System.out.println(ToStringBuilder.reflectionToString(s));
        });

但是所有示例都说明要使用端点?或 commandLineRunner。两者我都在寻找自动加载

https://spring.io/guides/gs/service-registration-and-discovery/

https://spring.io/blog/2015/01/20/microservice-registration-and-discovery-with-spring-cloud-and-netflix-s-eureka

不能为每个应用程序调用以下内容

@RequestMapping("/service-instances/{applicationName}")     public
 List<ServiceInstance> serviceInstancesByApplicationName(

如何自动注册?

编辑:更详细的问题

(1) 服务应用

bootstrap - spring.application.name=pluralsight-toll-service

申请道具

server.port=0
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true

eureka.instance.instance-id=${spring.application.name}:${random.int}
eureka.instance.hostname=localhost
management.endpoints.web.exposure.include=*

应用程序

@SpringBootApplication
@EnableEurekaClient
public class PluralsightEurekaTollrateServiceApplication {

我看到应用在尤里卡服务器上注册了

(2) 客户端 bootstrap

spring.application.name=pluralsight-tollrate-billboard
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true

application.props

server.port=8081
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
management.endpoints.web.exposure.include=*

应用程序

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class PluralsightEurekaTollrateBillboardApplication {

控制器

   @LoadBalanced
    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }
    
    @Autowired
    RestTemplate restTemplate;
    
    @RequestMapping("/dashboard")
    public String GetTollRate(@RequestParam int stationId, Model m) {
        
        TollRate tr = restTemplate.getForObject("http://pluralsight-toll-service/tollrate/" + stationId, TollRate.class);
    

Error: pluralsight-toll-service host is unknown

如何使用名称从客户端调用服务

已解决问题

这完全取决于客户端项目依赖性

    <!-- <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-netflix-eureka-client</artifactId>
        <version>3.0.3</version>
    </dependency> -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

名字太接近了 spring-cloud-netflix-eureka-client 错误 spring-cloud-starter-netflix-eureka-client 是正确的

因为写错了,只好加上com.netflix.eureka的eureka-client。全部清理干净,一切正常 (我还缺少 spring-cloud ,因为我是从 eclipse 创建的。将来只会使用 initializ )