From 28d1906cf192f702e7fc607242c816a51f7353dd Mon Sep 17 00:00:00 2001 From: YoVinchen Date: Tue, 15 Aug 2023 16:48:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E8=B4=9F=E8=BD=BD=E5=9D=87?= =?UTF-8?q?=E8=A1=A1=EF=BC=88=E6=94=B9=E4=B8=BA=E9=9A=8F=E6=9C=BA=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/test/config/BeanConfig.java | 5 +++- .../com/test/config/LoadBalancerConfig.java | 25 +++++++++++++++++++ .../src/main/resources/application-01.yml | 3 +-- .../src/main/resources/application-02.yml | 3 +-- 4 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 borrow-service/src/main/java/com/test/config/LoadBalancerConfig.java diff --git a/borrow-service/src/main/java/com/test/config/BeanConfig.java b/borrow-service/src/main/java/com/test/config/BeanConfig.java index 1279fa2..e891e37 100644 --- a/borrow-service/src/main/java/com/test/config/BeanConfig.java +++ b/borrow-service/src/main/java/com/test/config/BeanConfig.java @@ -1,6 +1,7 @@ package com.test.config; import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; @@ -13,10 +14,12 @@ import org.springframework.web.client.RestTemplate; * @Create 2023/8/15 10:08 */ @Configuration +@LoadBalancerClient(value = "userservice", //指定为 userservice 服务,只要是调用此服务都会使用我们指定的策略 + configuration = LoadBalancerConfig.class) //指定我们刚刚定义好的配置类 public class BeanConfig { @Bean @LoadBalanced - RestTemplate template(){ + RestTemplate template() { return new RestTemplate(); } } diff --git a/borrow-service/src/main/java/com/test/config/LoadBalancerConfig.java b/borrow-service/src/main/java/com/test/config/LoadBalancerConfig.java new file mode 100644 index 0000000..535dc5a --- /dev/null +++ b/borrow-service/src/main/java/com/test/config/LoadBalancerConfig.java @@ -0,0 +1,25 @@ +package com.test.config; + +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.loadbalancer.core.RandomLoadBalancer; +import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer; +import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; +import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.core.env.Environment; + +/** + * ClassName: LoadBalancerConfig + * Package: com.test.config + * + * @author yovinchen + * @Create 2023/8/15 16:46 + */ +public class LoadBalancerConfig { + //将官方提供的 RandomLoadBalancer 注册为Bean + @Bean + public ReactorLoadBalancer randomLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory){ + String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME); + return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name); + } +} diff --git a/eureka-service/src/main/resources/application-01.yml b/eureka-service/src/main/resources/application-01.yml index cfeaea4..29411f1 100644 --- a/eureka-service/src/main/resources/application-01.yml +++ b/eureka-service/src/main/resources/application-01.yml @@ -9,8 +9,7 @@ eureka: prefer-ip-address: false instance-id: ${spring.cloud.client.ip-address}:${server.port} client: - fetch-registry: true - register-with-eureka: false + fetch-registry: false serviceUrl: defaultZone: http://eureka02:8802/eureka, http://eureka01:8801/eureka server: diff --git a/eureka-service/src/main/resources/application-02.yml b/eureka-service/src/main/resources/application-02.yml index 2948c49..e4c2786 100644 --- a/eureka-service/src/main/resources/application-02.yml +++ b/eureka-service/src/main/resources/application-02.yml @@ -9,8 +9,7 @@ eureka: prefer-ip-address: false instance-id: ${spring.cloud.client.ip-address}:${server.port} client: - fetch-registry: true - register-with-eureka: false + fetch-registry: false serviceUrl: defaultZone: http://eureka01:8801/eureka, http://eureka02:8802/eureka server: