springcloud系列文章的第二篇
本章介紹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 @SpringBootApplication public 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已經默認實現了負載均衡
參考資料:
感謝分享:
翟永超:http://blog.didispace.com/spring-cloud-starter-dalston-1/
方志鵬:http://blog.csdn.net/forezp/article/details/70148833#t0
歡迎關注本人公眾號,掃碼發現更多精彩內容
![]() |
本文為原創文章,歡迎轉載,轉載請注明作者 |