From 9ba8574f8ae2fc2b6e4db79e9cb90a6bf397dc58 Mon Sep 17 00:00:00 2001 From: YunaiV <> Date: Sun, 9 Feb 2020 17:17:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20spring=20cloud=20netflix?= =?UTF-8?q?=20ribbon=20=E5=85=A5=E9=97=A8=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yaml | 15 ++-- .../pom.xml | 71 +++++++++++++++++++ .../consumer/DemoConsumerApplication.java | 63 ++++++++++++++++ .../src/main/resources/application.yaml | 27 +++++++ labx-02/pom.xml | 3 +- 5 files changed, 170 insertions(+), 9 deletions(-) create mode 100644 labx-02/labx-02-scn-ribbon-demo06-consumer/pom.xml create mode 100644 labx-02/labx-02-scn-ribbon-demo06-consumer/src/main/java/cn/iocoder/springcloudnetflix/labx02/ribbondemo/consumer/DemoConsumerApplication.java create mode 100644 labx-02/labx-02-scn-ribbon-demo06-consumer/src/main/resources/application.yaml diff --git a/labx-02/labx-02-scn-ribbon-demo05-consumer/src/main/resources/application.yaml b/labx-02/labx-02-scn-ribbon-demo05-consumer/src/main/resources/application.yaml index 9f5737d1..f9661e27 100644 --- a/labx-02/labx-02-scn-ribbon-demo05-consumer/src/main/resources/application.yaml +++ b/labx-02/labx-02-scn-ribbon-demo05-consumer/src/main/resources/application.yaml @@ -6,10 +6,6 @@ spring: # Nacos 作为注册中心的配置项,对应 NacosDiscoveryProperties 配置类 discovery: server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - loadbalancer: - # Spring Cloud Loadbalancer 重启配置,对应 LoadBalancerRetryProperties 配置类 - retry: - enabled: true # 是否开启重启,默认为 false 关闭重试。 server: port: 28080 # 服务器端口。默认为 8080 @@ -17,7 +13,10 @@ server: ribbon: # okhttp: # enabled: true # 设置使用 OkHttp,对应 OkHttpRibbonConfiguration 配置类 -# restclient: -# enabled: true # 设置使用 Jersey Client,对应 RestClientRibbonConfiguration 配置类 - httpclient: - enabled: true # 设置使用 Apache HttpClient,对应 HttpClientRibbonConfiguration 配置类 + restclient: + enabled: true # 设置使用 Jersey Client,对应 RestClientRibbonConfiguration 配置类 +# httpclient: +# enabled: true # 设置使用 Apache HttpClient,对应 HttpClientRibbonConfiguration 配置类 +# ConnectTimeout: 1 # 请求的连接超时时间,单位:毫秒。默认为 1000 +# ReadTimeout: 1 # 请求的读取超时时间,单位:毫秒。默认为 1000 + diff --git a/labx-02/labx-02-scn-ribbon-demo06-consumer/pom.xml b/labx-02/labx-02-scn-ribbon-demo06-consumer/pom.xml new file mode 100644 index 00000000..eeff3368 --- /dev/null +++ b/labx-02/labx-02-scn-ribbon-demo06-consumer/pom.xml @@ -0,0 +1,71 @@ + + + + labx-01 + cn.iocoder.springboot.labs + 1.0-SNAPSHOT + + 4.0.0 + + labx-02-scn-ribbon-demo06-consumer + + + 2.2.4.RELEASE + Hoxton.SR1 + 2.2.0.RELEASE + + + + + + + org.springframework.boot + spring-boot-starter-parent + ${spring.boot.version} + pom + import + + + org.springframework.cloud + spring-cloud-dependencies + ${spring.cloud.version} + pom + import + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${spring.cloud.alibaba.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-starter-web + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + com.squareup.okhttp3 + okhttp + + + + + + diff --git a/labx-02/labx-02-scn-ribbon-demo06-consumer/src/main/java/cn/iocoder/springcloudnetflix/labx02/ribbondemo/consumer/DemoConsumerApplication.java b/labx-02/labx-02-scn-ribbon-demo06-consumer/src/main/java/cn/iocoder/springcloudnetflix/labx02/ribbondemo/consumer/DemoConsumerApplication.java new file mode 100644 index 00000000..ec59a021 --- /dev/null +++ b/labx-02/labx-02-scn-ribbon-demo06-consumer/src/main/java/cn/iocoder/springcloudnetflix/labx02/ribbondemo/consumer/DemoConsumerApplication.java @@ -0,0 +1,63 @@ +package cn.iocoder.springcloudnetflix.labx02.ribbondemo.consumer; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.RestTemplate; + +@SpringBootApplication +public class DemoConsumerApplication { + + public static void main(String[] args) { + SpringApplication.run(DemoConsumerApplication.class, args); + } + + @Configuration + public class RestTemplateConfiguration { + + @Bean + @LoadBalanced + public RestTemplate restTemplate() { + return new RestTemplate(); + } + + } + + @RestController + static class TestController { + + @Autowired + private RestTemplate restTemplate; + @Autowired + private LoadBalancerClient loadBalancerClient; + + @GetMapping("/hello") + public String hello(String name) { + // 获得服务 `demo-provider` 的一个实例 + ServiceInstance instance = loadBalancerClient.choose("demo-provider"); + // 发起调用 + String targetUrl = instance.getUri() + "/echo?name=" + name; + String response = restTemplate.getForObject(targetUrl, String.class); + // 返回结果 + return "consumer:" + response; + } + + @GetMapping("/hello02") + public String hello02(String name) { + // 直接使用 RestTemplate 调用服务 `demo-provider` + String targetUrl = "http://demo-provider/echo?name=" + name; + String response = restTemplate.getForObject(targetUrl, String.class); + // 返回结果 + return "consumer:" + response; + } + + } + +} diff --git a/labx-02/labx-02-scn-ribbon-demo06-consumer/src/main/resources/application.yaml b/labx-02/labx-02-scn-ribbon-demo06-consumer/src/main/resources/application.yaml new file mode 100644 index 00000000..97deb03a --- /dev/null +++ b/labx-02/labx-02-scn-ribbon-demo06-consumer/src/main/resources/application.yaml @@ -0,0 +1,27 @@ +spring: + application: + name: demo-consumer # Spring 应用名 + cloud: + nacos: + # Nacos 作为注册中心的配置项,对应 NacosDiscoveryProperties 配置类 + discovery: + server-addr: 127.0.0.1:8848 # Nacos 服务器地址 + loadbalancer: + # Spring Cloud Loadbalancer 重启配置,对应 LoadBalancerRetryProperties 配置类 + retry: + enabled: true # 是否开启重启,默认为 false 关闭重试。 + +server: + port: 28080 # 服务器端口。默认为 8080 + +ribbon: + restclient: + enabled: true # 设置使用 Jersey Client,对应 RestClientRibbonConfiguration 配置类 + ConnectTimeout: 1 # 请求的连接超时时间,单位:毫秒。默认为 1000 + ReadTimeout: 1 # 请求的读取超时时间,单位:毫秒。默认为 1000 + +user-provider: + ribbon: + OkToRetryOnAllOperations: true # 是否对所有操作都进行重试,默认为 false。 + MaxAutoRetries: 1 # 对当前服务的重试次数,默认为 0 次。 + MaxAutoRetriesNextServer: 2 # 重新选择服务的次数,默认为 1 次。注意,不包含第 1 次哈。 diff --git a/labx-02/pom.xml b/labx-02/pom.xml index 4e2311df..51e48835 100644 --- a/labx-02/pom.xml +++ b/labx-02/pom.xml @@ -22,8 +22,9 @@ labx-02-scn-ribbon-demo04-consumer - labx-02-scn-ribbon-demo05-consumer + + labx-02-scn-ribbon-demo06-consumer