Ribbon簡介
在微服務(wù)架構(gòu)中,業(yè)務(wù)都會被拆分成一個獨立的服務(wù)稿湿,服務(wù)與服務(wù)的通訊是基于Http Restful的铅匹。SpringCloud有兩種服務(wù)調(diào)用方式,一種是Ribbon + RestTemplate饺藤,另一種是Feign包斑。Ribbon是一個負載均衡客戶端,可以很好的控制http和tcp的一些行為涕俗。Feign默認集成了Ribbon罗丰。
- 引入依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
- 通過@EnableDiscoveryClient向服務(wù)中心注冊:
@SpringBootApplication
@EnableDiscoveryClient
public class ServiceRibbonApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceRibbonApplication.class, args);
}
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
}
向程序的ioc注入一個bean: restTemplate;并通過@LoadBalanced注解表明這個restRemplate開啟負載均衡的功能咽袜。
- 配置文件application.yml如下:
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
server:
port: 8764
spring:
application:
name: service-ribbon
啟動工程后丸卷,可以在 http://localhost:8761/ 中看到service-ribbon注冊進來了枕稀。
負載均衡測試:
- 復(fù)制一個上篇文章中端口為8762的微服務(wù)service-1询刹,將端口改為8763啟動谜嫉,此時可以在注冊表中看到有兩個service-1實例。
- 接下來通過之前注入IOC容器的restTemplate來消費service-1服務(wù)的接口凹联,我們可以用的程序名替代具體的URL地址沐兰,在Ribbon中會根據(jù)服務(wù)名來選擇具體的服務(wù)實例,根據(jù)服務(wù)實例在請求的時候會用具體的url替換掉服務(wù)名蔽挠。
- 在瀏覽器上多次訪問
http://localhost:8764/{yourInterface}
就會出現(xiàn)啟動的兩個service-1實例會被輪流調(diào)用住闯,這就說明進行了負載均衡,訪問了不同的端口的服務(wù)實例澳淑。