@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.yml
eureka サーバーの構成は次のとおりです。
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 に登録します。