springcloud之服務消費者(ribbon)
本章介紹springcloud中的服務消費者
springcloud服務調用方式有兩種實現方式:
1,restTemplate+ribbon,
2,feign
本來想一篇講完,發現篇幅有點長,所以本章先講 restTemplate+ribbon,
ribbon是一個負載均衡客戶端,可以很好的控制htt和tcp的一些行為。
Feign默認集成了ribbon。
新一個springboot項目,名字為 eureka-consumer-ribbon
其pom.xml配置如下
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
在項目啟動類Application上添加@EnableDiscoveryClient註解(上一章提到了@EnableDiscoveryClient和@EnableEurekaServer的區別)向服務中心註冊服務,
並且使用@bean像spring容器中註入一個restTemplate對象,@LoadBalanced註解表明這個restRemplate開啟負載均衡的功能。
@EnableDiscoveryClient @SpringBootApplicationpublic class Application { @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { new SpringApplicationBuilder(Application.class).web(true).run(args); } }
在application.properties中指定,服務名:eureka-consumer-ribbon,端口為9101,服務註冊中心地址為:http://localhost:9001/eureka/
spring.application.name=eureka-consumer-ribbon server.port=9101 eureka.client.serviceUrl.defaultZone=http://localhost:9001/eureka/
新建一個RibbonController類,用來消費eureka-client的服務
@RestController
public class RibbonController {
@Autowired
RestTemplate restTemplate;
@GetMapping("/consumer")
public String getMsg() {
return restTemplate.getForObject("http://eureka-client/client", String.class);
}
}
這裏的請求地址使用http://server-name,來代替http://ip:port,因為在ribbon中它會根據服務名來選擇具體的服務實例,根據服務實例在請求的時候會用具體的url替換掉服務名,這裏請求的是eureka-client/client
使用上一章已經創建的項目eureka-server,eureka-client這倆項目
首先:
1,啟動 eureka-server
2,啟動 eureka-client 配置文件的端口默認為9002
3,修改配置文件的端口為9003,再啟動一個eureka-client
4,在啟動 eureka-consumer-ribbon
訪問http://localhost:9001/,就會發現,已經有eureka-clent服務註冊了,而且有兩個實例,9002和9003
訪問 http://localhost:9101/consumer,就會發現已經消費了 eureka-client項目提供的服務,而且ribbon已經默認實現了負載均衡
本文代碼: 碼雲: GitHub:
參考資料:
感謝分享:
翟永超:http://blog.didispace.com/spring-cloud-starter-dalston-1/
方誌鵬:http://blog.csdn.net/forezp/article/details/70148833#t0
歡迎關註本人公眾號,掃碼發現更多精彩內容
本文為原創文章,歡迎轉載,轉載請註明作者 |
springcloud之服務消費者(ribbon)