diff --git a/pom.xml b/pom.xml index 197074c455..5d8358f05e 100644 --- a/pom.xml +++ b/pom.xml @@ -726,9 +726,11 @@ spring-cloud-modules/spring-cloud-circuit-breaker spring-cloud-modules/spring-cloud-contract spring-cloud-modules/spring-cloud-data-flow + spring-cloud-modules/spring-cloud-eureka spring-cloud-modules/spring-cloud-netflix-feign spring-cloud-modules/spring-cloud-stream-starters spring-cloud-modules/spring-cloud-zuul-eureka-integration + spring-exceptions spring-jenkins-pipeline spring-core @@ -1004,11 +1006,13 @@ spring-drools spring-cloud-modules/spring-cloud-azure spring-cloud-modules/spring-cloud-circuit-breaker + spring-cloud-modules/spring-cloud-eureka spring-cloud-modules/spring-cloud-contract spring-cloud-modules/spring-cloud-data-flow spring-cloud-modules/spring-cloud-netflix-feign spring-cloud-modules/spring-cloud-stream-starters spring-cloud-modules/spring-cloud-zuul-eureka-integration + spring-exceptions spring-jenkins-pipeline spring-core diff --git a/spring-cloud-modules/pom.xml b/spring-cloud-modules/pom.xml index b21b208414..a098bc90a9 100644 --- a/spring-cloud-modules/pom.xml +++ b/spring-cloud-modules/pom.xml @@ -19,7 +19,8 @@ spring-cloud-loadbalancer spring-cloud-config - spring-cloud-eureka + + spring-cloud-hystrix spring-cloud-bootstrap spring-cloud-ribbon-client diff --git a/spring-cloud-modules/spring-cloud-eureka/pom.xml b/spring-cloud-modules/spring-cloud-eureka/pom.xml index 23523f2c2f..599853c675 100644 --- a/spring-cloud-modules/spring-cloud-eureka/pom.xml +++ b/spring-cloud-modules/spring-cloud-eureka/pom.xml @@ -45,8 +45,6 @@ - 2.1.2.RELEASE - Greenwich.RELEASE 2.17.1 diff --git a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/pom.xml b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/pom.xml index 4fdfe2d9c2..08a85d191a 100644 --- a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/pom.xml +++ b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/pom.xml @@ -41,7 +41,7 @@ org.springframework.cloud - spring-cloud-starter-netflix-ribbon + spring-cloud-starter-loadbalancer org.springframework.cloud @@ -51,6 +51,20 @@ org.springframework.boot spring-boot-starter-web + + org.springframework.boot + spring-boot-starter-webflux + + + io.projectreactor + reactor-test + test + + + org.springframework.boot + spring-boot-starter-test + 2.6.8 + com.github.tomakehurst wiremock @@ -75,9 +89,18 @@ + + + repository.spring.milestone + Spring Milestone Repository + https://repo.spring.io/release + + + + org.apache.maven.plugins maven-surefire-plugin 1 @@ -87,4 +110,9 @@ + + 17 + 17 + + \ No newline at end of file diff --git a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/main/java/com/baeldung/spring/cloud/client/BooksClient.java b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/main/java/com/baeldung/spring/cloud/client/BooksClient.java index a263624b28..97d8643e19 100644 --- a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/main/java/com/baeldung/spring/cloud/client/BooksClient.java +++ b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/main/java/com/baeldung/spring/cloud/client/BooksClient.java @@ -1,16 +1,15 @@ package com.baeldung.spring.cloud.client; -import com.baeldung.spring.cloud.model.Book; -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.RequestMapping; - import java.util.List; -@FeignClient("books-service") -//@FeignClient(value="simple-books-client", url="${book.service.url}") +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.RequestMapping; + +import com.baeldung.spring.cloud.model.Book; + +@FeignClient(name = "books-service") public interface BooksClient { @RequestMapping("/books") List getBooks(); - } diff --git a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/BooksClientIntegrationTest.java b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/BooksClientIntegrationTest.java index 2842eef435..7f4807e356 100644 --- a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/BooksClientIntegrationTest.java +++ b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/BooksClientIntegrationTest.java @@ -8,6 +8,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -21,6 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; @SpringBootTest @ActiveProfiles("test") +@EnableFeignClients @EnableConfigurationProperties @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = { WireMockConfig.class }) @@ -29,12 +31,16 @@ class BooksClientIntegrationTest { @Autowired private WireMockServer mockBooksService; + @Autowired + private WireMockServer mockBooksService2; + @Autowired private BooksClient booksClient; @BeforeEach void setUp() throws IOException { setupMockBooksResponse(mockBooksService); + setupMockBooksResponse(mockBooksService2); } @Test diff --git a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/EurekaContainerConfig.java b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/EurekaContainerConfig.java index 6747d14b88..10ea3ffa34 100644 --- a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/EurekaContainerConfig.java +++ b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/EurekaContainerConfig.java @@ -31,9 +31,6 @@ public class EurekaContainerConfig { + eurekaServer.getFirstMappedPort().toString() + "/eureka") .applyTo(configurableApplicationContext); - } - } - } diff --git a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/LoadBalancerBooksClientIntegrationTest.java b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/LoadBalancerBooksClientIntegrationTest.java index f05df11ba3..5690c24d77 100644 --- a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/LoadBalancerBooksClientIntegrationTest.java +++ b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/LoadBalancerBooksClientIntegrationTest.java @@ -9,23 +9,39 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.client.DefaultServiceInstance; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.loadbalancer.Response; +import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer; +import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer; +import org.springframework.cloud.loadbalancer.core.RoundRobinLoadBalancer; +import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; +import org.springframework.cloud.loadbalancer.support.ServiceInstanceListSuppliers; +import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import java.io.IOException; +import java.util.Arrays; +import java.util.List; import static com.baeldung.spring.cloud.client.BookMocks.setupMockBooksResponse; import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; import static com.github.tomakehurst.wiremock.client.WireMock.moreThan; import static java.util.Arrays.asList; +import static org.assertj.core.api.BDDAssertions.then; import static org.junit.jupiter.api.Assertions.assertTrue; +import reactor.core.publisher.Mono; +import reactor.test.StepVerifier; + @SpringBootTest -@ActiveProfiles("ribbon-test") +@ActiveProfiles("test") @EnableConfigurationProperties +@EnableFeignClients @ExtendWith(SpringExtension.class) -@ContextConfiguration(classes = { RibbonTestConfig.class }) +@ContextConfiguration(classes = { TestConfig.class }) class LoadBalancerBooksClientIntegrationTest { @Autowired @@ -37,10 +53,22 @@ class LoadBalancerBooksClientIntegrationTest { @Autowired private BooksClient booksClient; + @Autowired + private LoadBalancerClientFactory clientFactory; + @BeforeEach void setUp() throws IOException { setupMockBooksResponse(mockBooksService); setupMockBooksResponse(secondMockBooksService); + + String serviceId = "books-service"; + RoundRobinLoadBalancer loadBalancer = new RoundRobinLoadBalancer(ServiceInstanceListSuppliers + .toProvider(serviceId, instance(serviceId, "localhost", false), instance(serviceId, "localhost", true)), + serviceId, -1); + } + + private static DefaultServiceInstance instance(String serviceId, String host, boolean secure) { + return new DefaultServiceInstance(serviceId, serviceId, host, 80, secure); } @Test @@ -62,4 +90,53 @@ class LoadBalancerBooksClientIntegrationTest { new Book("Dune", "Frank Herbert"), new Book("Foundation", "Isaac Asimov")))); } + + @Test + void loadbalancerWorks() throws IOException { + + setupMockBooksResponse(mockBooksService); + setupMockBooksResponse(secondMockBooksService); + + ReactiveLoadBalancer reactiveLoadBalancer = this.clientFactory.getInstance("books-service", + ReactiveLoadBalancer.class, ServiceInstance.class); + + then(reactiveLoadBalancer).isInstanceOf(RoundRobinLoadBalancer.class); + then(reactiveLoadBalancer).isInstanceOf(ReactorLoadBalancer.class); + ReactorLoadBalancer loadBalancer = (ReactorLoadBalancer) reactiveLoadBalancer; + + for (int k = 0; k < 10; k++) { + booksClient.getBooks(); + } + + // order dependent on seedPosition -1 of RoundRobinLoadBalancer + List hosts = Arrays.asList("localhost", "localhost"); + + assertLoadBalancer(loadBalancer, hosts); + + mockBooksService.verify( + moreThan(0), getRequestedFor(WireMock.urlEqualTo("/books"))); + secondMockBooksService.verify( + moreThan(0), getRequestedFor(WireMock.urlEqualTo("/books"))); + } + + private void assertLoadBalancer(ReactorLoadBalancer loadBalancer, List hosts) { + for (String host : hosts) { + Mono> source = loadBalancer.choose(); + StepVerifier.create(source).consumeNextWith(response -> { + then(response).isNotNull(); + then(response.hasServer()).isTrue(); + + ServiceInstance instance = response.getServer(); + then(instance).isNotNull(); + then(instance.getHost()).as("instance host is incorrect %s", host).isEqualTo(host); + + if (host.contains("secure")) { + then(instance.isSecure()).isTrue(); + } + else { + then(instance.isSecure()).isFalse(); + } + }).verifyComplete(); + } + } } diff --git a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/LoadBalancerIntegrationTest.java b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/LoadBalancerIntegrationTest.java new file mode 100644 index 0000000000..eee4e7b860 --- /dev/null +++ b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/LoadBalancerIntegrationTest.java @@ -0,0 +1,112 @@ +package com.baeldung.spring.cloud.client; + +import static org.assertj.core.api.BDDAssertions.then; + +import java.util.Arrays; +import java.util.List; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringBootConfiguration; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.cloud.client.DefaultServiceInstance; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.loadbalancer.Response; +import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient; +import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients; +import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer; +import org.springframework.cloud.loadbalancer.core.RoundRobinLoadBalancer; +import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; +import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; +import org.springframework.cloud.loadbalancer.support.ServiceInstanceListSuppliers; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Bean; +import org.springframework.core.env.Environment; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import com.github.tomakehurst.wiremock.WireMockServer; + +import reactor.core.publisher.Mono; +import reactor.test.StepVerifier; + +@SpringBootTest +@EnableFeignClients +@EnableConfigurationProperties +@ExtendWith(SpringExtension.class) +@ActiveProfiles("test") +@ContextConfiguration(classes = { TestConfig.class }) +class LoadBalancerIntegrationTest { + + @Autowired + private LoadBalancerClientFactory clientFactory; + + @Autowired + private BooksClient booksClient; + + @Autowired + private WireMockServer mockBooksService; + + @Autowired + private WireMockServer secondMockBooksService; + + private void assertLoadBalancer(ReactorLoadBalancer loadBalancer, List hosts) { + for (String host : hosts) { + Mono> source = loadBalancer.choose(); + StepVerifier.create(source).consumeNextWith(response -> { + then(response).isNotNull(); + then(response.hasServer()).isTrue(); + + ServiceInstance instance = response.getServer(); + then(instance).isNotNull(); + then(instance.getHost()).as("instance host is incorrect %s", host).isEqualTo(host); + + if (host.contains("secure")) { + then(instance.isSecure()).isTrue(); + } + else { + then(instance.isSecure()).isFalse(); + } + }).verifyComplete(); + } + } + + @Test + void staticConfigurationWorks() { + String serviceId = "test-book-service"; + RoundRobinLoadBalancer loadBalancer = new RoundRobinLoadBalancer(ServiceInstanceListSuppliers + .toProvider(serviceId, instance(serviceId, "bookservice1", false), instance(serviceId, "bookservice2", false)), + serviceId, -1); + assertLoadBalancer(loadBalancer, Arrays.asList("bookservice1", "bookservice2")); + } + + private static DefaultServiceInstance instance(String serviceId, String host, boolean secure) { + return new DefaultServiceInstance(serviceId, serviceId, host, 80, secure); + } + + @EnableAutoConfiguration + @SpringBootConfiguration(proxyBeanMethods = false) + @LoadBalancerClients({ @LoadBalancerClient(name = "books-service", configuration = MyBooksServiceConfig.class) }) + @EnableCaching + protected static class Config { + + } + + protected static class MyBooksServiceConfig { + + @Bean + public RoundRobinLoadBalancer roundRobinContextLoadBalancer(LoadBalancerClientFactory clientFactory, + Environment env) { + String serviceId = LoadBalancerClientFactory.getName(env); + return new RoundRobinLoadBalancer( + clientFactory.getLazyProvider(serviceId, ServiceInstanceListSupplier.class), serviceId, -1); + } + + } + +} \ No newline at end of file diff --git a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/RibbonTestConfig.java b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/RibbonTestConfig.java deleted file mode 100644 index 273ba182b1..0000000000 --- a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/RibbonTestConfig.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.baeldung.spring.cloud.client; - -import com.github.tomakehurst.wiremock.WireMockServer; -import com.netflix.loadbalancer.Server; -import com.netflix.loadbalancer.ServerList; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.TestConfiguration; -import org.springframework.cloud.netflix.ribbon.StaticServerList; -import org.springframework.context.annotation.Bean; -import org.springframework.test.context.ActiveProfiles; - -import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options; - -@TestConfiguration -@ActiveProfiles("ribbon-test") -public class RibbonTestConfig { - - @Autowired - private WireMockServer mockBooksService; - - @Autowired - private WireMockServer secondMockBooksService; - - @Bean(initMethod = "start", destroyMethod = "stop") - public WireMockServer mockBooksService() { - return new WireMockServer(options().dynamicPort()); - } - - @Bean(name="secondMockBooksService", initMethod = "start", destroyMethod = "stop") - public WireMockServer secondBooksMockService() { - return new WireMockServer(options().dynamicPort()); - } - - @Bean - public ServerList ribbonServerList() { - return new StaticServerList<>( - new Server("localhost", mockBooksService.port()), - new Server("localhost", secondMockBooksService.port())); - } - -} diff --git a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/TestConfig.java b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/TestConfig.java new file mode 100644 index 0000000000..b3770721b1 --- /dev/null +++ b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/TestConfig.java @@ -0,0 +1,24 @@ +package com.baeldung.spring.cloud.client; + +import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options; + +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.test.context.ActiveProfiles; + +import com.github.tomakehurst.wiremock.WireMockServer; + +@TestConfiguration +@ActiveProfiles("test") +public class TestConfig { + + @Bean(initMethod = "start", destroyMethod = "stop") + public WireMockServer mockBooksService() { + return new WireMockServer(options().port(80)); + } + + @Bean(name="secondMockBooksService", initMethod = "start", destroyMethod = "stop") + public WireMockServer secondBooksMockService() { + return new WireMockServer(options().port(81)); + } +} diff --git a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/WireMockConfig.java b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/WireMockConfig.java index 82b7cddede..3d4f2822f4 100644 --- a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/WireMockConfig.java +++ b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/java/com/baeldung/spring/cloud/client/WireMockConfig.java @@ -11,7 +11,11 @@ public class WireMockConfig { @Bean(initMethod = "start", destroyMethod = "stop") public WireMockServer mockBooksService() { - return new WireMockServer(9561); + return new WireMockServer(80); } + @Bean(initMethod = "start", destroyMethod = "stop") + public WireMockServer mockBooksService2() { + return new WireMockServer(81); + } } diff --git a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/resources/application-ribbon-test.yml b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/resources/application-ribbon-test.yml deleted file mode 100644 index 84a78d0ec7..0000000000 --- a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/resources/application-ribbon-test.yml +++ /dev/null @@ -1,3 +0,0 @@ -eureka: - client: - enabled: false diff --git a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/resources/application-spring-cloud-balancer-test.yml b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/resources/application-spring-cloud-balancer-test.yml new file mode 100644 index 0000000000..ad11d46ae8 --- /dev/null +++ b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/resources/application-spring-cloud-balancer-test.yml @@ -0,0 +1,19 @@ +eureka: + client: + enabled: false + +spring: + application: + name: books-service + cloud: + loadbalancer: + ribbon: + enabled: false + discovery: + client: + simple: + instances: + books-service[0]: + uri: http://localhost:80 + books-service[1]: + uri: http://localhost:81 \ No newline at end of file diff --git a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/resources/application-test.yml b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/resources/application-test.yml index dce11adf69..231d45004f 100644 --- a/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/resources/application-test.yml +++ b/spring-cloud-modules/spring-cloud-eureka/spring-cloud-eureka-feign-client-integration-test/src/test/resources/application-test.yml @@ -1,11 +1,19 @@ -#book: -# service: -# url: http://localhost:9561 - -books-service: - ribbon: - listOfServers: http://localhost:9561 - eureka: client: enabled: false + +spring: + application: + name: books-service + cloud: + loadbalancer: + ribbon: + enabled: false + discovery: + client: + simple: + instances: + books-service[0]: + uri: http://localhost:80 + books-service[1]: + uri: http://localhost:81