SpringCloud微服務架構最簡單粗暴講解之Ribbon使用篇

1。環境準備

我們繼續使用《SpringCloud之Eureka使用篇》裡面Eureka叢集環境。

1。首先我這裡有spring-cloud-parent pom工程

2。spring-cloud-eureka-server Eureka Server 子工程 這裡埠我們使用90開頭

我們這裡叢集由兩個服務例項組成,分別是9090與9091埠

3。spring-cloud-user-service-consumer 使用者服務 (也就是咱們的服務消費者)這裡埠我們使用80 開頭

4。spring-cloud-order-service-provider 訂單提供服務 (服務提供者) 這裡埠我們使用70開頭

我們訂單服務提供著也由兩個例項組成,分別是7070與7071

SpringCloud微服務架構最簡單粗暴講解之Ribbon使用篇

2。 spring-cloud-eureka-server

我們spring-cloud-parent 父工程 與Eureka Server 服務spring-cloud-eureka-server不需要動,然後分別啟動9090埠與9091埠的Eureka Server。

SpringCloud微服務架構最簡單粗暴講解之Ribbon使用篇

3。訂單服務(服務提供者)

3。1 application。yml

我們這裡使用springboot profiles 配置檔案特性將訂單提供者服務spring-cloud-order-service-provider分成不同埠

spring: application: name: spring-cloud-order-service-provider——-spring: profiles: p1eureka: client: service-url: defaultZone: http://EurekaServerA:9090/eureka,http://EurekaServerB:9091/eureka fetch-registry: true register-with-eureka: true instance: prefer-ip-address: true # 使用ip註冊 #自定義例項顯示格式,新增版本號 instance-id: ${spring。cloud。client。ip-address}:${spring。application。name}:${server。port}:@project。version@server: port: 7070——-spring: profiles: p2eureka: client: service-url: defaultZone: http://EurekaServerA:9090/eureka,http://EurekaServerB:9091/eureka fetch-registry: true register-with-eureka: true instance: prefer-ip-address: true # 使用ip註冊 #自定義例項顯示格式,新增版本號 instance-id: ${spring。cloud。client。ip-address}:${spring。application。name}:${server。port}:@project。version@server: port: 7071

並配置idea啟動

SpringCloud微服務架構最簡單粗暴講解之Ribbon使用篇

SpringCloud微服務架構最簡單粗暴講解之Ribbon使用篇

3。2 controller

修改controller,讓其返回當前服務的埠,利於我們觀察

@RestController@RequestMapping(“/order/data”)public class OrderStatisticServiceController { @Value(“${server。port}”) private Integer port; /** * 根據使用者id獲取今日完單數 * @param id 使用者ID * @return 完單數 */ @GetMapping(“/getTodayFinishOrderNum/{id}”) public Integer getTodayFinishOrderNum(@PathVariable(“id”) Integer id){ return port; }}

3。3 啟動

分別啟動訂單服務提供者 7070 與7071 服務,我們可以看到兩個服務提供者註冊到Eureka Server 上面了。

SpringCloud微服務架構最簡單粗暴講解之Ribbon使用篇

4。使用者服務(服務呼叫者)

訂單呼叫者服務: spring-cloud-user-service-consumer:8080

4。1 RestTemplateConfiguration

我們需要在RestTemplate配置類裡面在注入RestTemplate的方法上面添加註解@LoadBalanced

@Configurationpublic class RestTemplateConfiguration { @Bean @LoadBalanced public RestTemplate getRestTemplate(){ return new RestTemplate(); }}

這就ok了,我們這裡不需要新增Ribbon的依賴,因為Eureka Client包裡面幫我們引入Ribbon相關的依賴。

SpringCloud微服務架構最簡單粗暴講解之Ribbon使用篇

4。2 controller

這裡我們只需要在呼叫url中寫入要呼叫的服務名字就可以了,然後Ribbon就會幫我們從服務列表找到合適的服務呼叫的

@RestController@RequestMapping(“/user/data”)public class UserCenterController { @Autowired private RestTemplate restTemplate; @GetMapping(“/getTodayStatistic/{id}”) public Integer getTodayStatistic(@PathVariable(“id”) Integer id){ String url =“http://spring-cloud-order-service-provider/order/data/getTodayFinishOrderNum/”+id; return restTemplate。getForObject(url, Integer。class); }}

4。3 啟動測試

SpringCloud微服務架構最簡單粗暴講解之Ribbon使用篇

我們呼叫兩次,分別返回7071與7070,說明我們Ribbon起作用了。

SpringCloud微服務架構最簡單粗暴講解之Ribbon使用篇

SpringCloud微服務架構最簡單粗暴講解之Ribbon使用篇

4。4 調整負載均衡策略

我們這邊預設的負載均衡策略是:ZoneAvoidanceRule:區域權衡策略。然後我們可以透過配置來使用其他的負載均衡策略,比如我們使用隨機策略:

application。yml中配置

這個是針對spring-cloud-order-service-provider 這個服務的。

spring-cloud-order-service-provider: ribbon: NFLoadBalancerRuleClassName: com。netflix。loadbalancer。RandomRule

原文連結:https://blog。csdn。net/yuanshangshenghuo/java/article/details/106975354