2
@Component
@EnableFeignClients
public class ABCClientApp {

    @Autowired
    ABCClient client;

    public TenantClientApp() {
        // TODO Auto-generated constructor stub
    }

    public ABC getABC(String abcId) {
        return client.getABC(abcId);
    }

    @FeignClient("abc-service")
    public interface ABCClient {

        @RequestMapping(method = RequestMethod.GET, value = "/abc/{abcId}")
        ABC getABC(@PathVariable("abcId") String abcId);

    }

}

以下は、上記のクラスのテストです。

@Configuration
@EnableDiscoveryClient
@ComponentScan("com.abc.client.rest")
@EnableAutoConfiguration(exclude={org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration.class,org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration.class})
@SpringApplicationConfiguration(classes=ABCClientAppTest.class)
public class ABCClientAppTest extends AbstractTestNGSpringContextTests{

    @Autowired
    ABCClientApp app;

    @Test
    public void test_getABC() {
        String abcId = "250449AD17E1";
        app.getABC(abcId);
    }

}

TestNG を使用してテストを実行すると、次のエラーがスローされます。

com.netflix.client.ClientException: ロード バランサーにクライアント用の使用可能なサーバーがありません: abc-service

Eureka サーバーは構成サーバーを見つけるように構成されています。 application.ymleureka サーバーの構成は次のとおりです。

info:
  description: Eureka Service Registry

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

security:
  user:
    password: password

and bootstrap.yml is as follows:

spring:
  application:
    name: eureka
  cloud:
    config:
      enabled: false

構成サーバー、eureka サーバー、および abc-service は、上記のテストを実行する前に、Spring Boot アプリとして実行されます。abc-service は、起動時に自分自身を Eureka に登録します。

4

1 に答える 1