1

I am trying to write a simple SpringBootTest to validate a single Feign client method using a Spring Cloud load balancer configuration defined in application.properties. I suspect I am not constructing the app. context correctly for the test as I see an error in the logs of;

10:29:03.488 [Test worker] DEBUG o.s.c.o.l.RetryableFeignBlockingLoadBalancerClient - Service instance retrieved from LoadBalancedRetryContext: was null. Reattempting service instance selection
10:29:03.490 [Test worker] DEBUG o.s.c.o.l.RetryableFeignBlockingLoadBalancerClient - Selected service instance: null
10:29:03.490 [Test worker] WARN  o.s.c.o.l.RetryableFeignBlockingLoadBalancerClient - Service instance was not resolved, executing the original request

The test code is;

@SpringBootTest
@TestPropertySource("/vendor-load-balance-test.properties")
@EnableFeignClients(clients = { EndpointLoadBalancedFeignClientAPI.class })
@EnableAutoConfiguration
@ContextConfiguration(classes = { RestTemplate.class, SimpleReactiveDiscoveryClient.class, SimpleReactiveDiscoveryProperties.class, MetadataDefaulter.class })
@LoadBalancerClient(name="endpoint", configuration = EndpointLoadBalancerConfiguration.class)
class ProofpointInterfaceLoadBalanceAPITest {
    @Autowired
    private EndpointLoadBalancedFeignClientAPI endpointFeignClientAPI;

    @Test
    public void testScan() {
        endpointFeignClientAPI.scanMessage("authHeader", "500botid", ScanRequest.builder().build());
    }
}

The Load Balancer custom configuration is to include healthchecks;

public class EndpointLoadBalancerConfiguration {
    @Bean
    public ServiceInstanceListSupplier instanceSupplier(ConfigurableApplicationContext context) {
        ServiceInstanceListSupplier serviceInstance = ServiceInstanceListSupplier.builder()
                .withDiscoveryClient()
                .withBlockingHealthChecks()
                .build(context);

        return serviceInstance;
    }
}

and the relevant properties are;

spring.cloud.discovery.client.simple.instances.endpoint[0].uri=https://localhost:9443
spring.cloud.discovery.client.simple.instances.endpoint[1].uri=https://localhost:9444

Any suggestions welcome. Thanks.

Paul Keogh
  • 74
  • 6

0 Answers0