步驟
- 前提基於 Eureka Server 註冊中心搭建完成
- 開始搭建Provider 和 Consumer 服務
- 通過Fegin 進行通信
搭建Eureka Provider
創建Eureka Provider工程 ;POM引入依賴 netflix-eureka-client
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
application.properties 配置註冊中心
spring.application.name=spring-cloud-eureka-provider
server.port=9000
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
啓動類
- 聲明啓用服務發現客戶端
- 標註 @EnableDiscoveryClient 註解
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class EurekaConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaConsumerApplication.class, args);
}
}
提供一個HTTP服務
@RestController
@RequestMapping("/")
public class IndexController {
@RequestMapping("/hello")
public String hello(String name) {
return "hello" + name;
}
}
啓動
- 前提需要Eureka Server 註冊中心先行啓動
- 啓動註冊完成
搭建Eureka Consumer
創建Eureka Consumer工程
- 引入netflix-eureka-client Eureka客戶端jar包
- starter-openfeign feign 聲明式調用jar包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
配置服務實例,註冊中心
spring.application.name=spring-cloud-eureka-consumer
server.port=8080
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
啓動類
- 開啓Eureka服務發現 ;加上註解:@EnableDiscoveryClient
- 開始Feign 客戶端聲明式通信 ; 加上註解:@EnableFeignClients
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class EurekaConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaConsumerApplication.class, args);
}
}
聲明Feign Client 接口;只需要接口方法
- @FeignClient 註解來生命;name 或 value 指定遠程服務的實例名
- @RequestMapping 指定訪問http 路徑
- @RequestParam request請求參數
@FeignClient(name = "spring-cloud-eureka-provider")
public interface IndexRemote {
@RequestMapping(value = "/hello")
String hello(@RequestParam(value = "name") String name);
}
服務調用
- 注入FeignClient生命的遠程調用
- 調用接口
@RestController
@RequestMapping("/")
public class ConsumerController {
@Autowired
private IndexRemote indexRemote;
@RequestMapping("/index/{name}")
public String index(@PathVariable("name") String name) {
return indexRemote.hello(name);
}
}
啓動、調試調用
Eureka Provider集羣;Feign負載均衡
Eureka Provider集羣
- 配置集羣 application.yml 文件 ;指定多個profiles
spring:
application:
name: spring-cloud-eureka-provider
profiles: provider1
server:
port: 9000
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8000/eureka/
---
spring:
application:
name: spring-cloud-eureka-provider
profiles: provider2
server:
port: 9001
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8000/eureka/
---
spring:
application:
name: spring-cloud-eureka-provider
profiles: provider3
server:
port: 9002
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8000/eureka/
@RestController
@RequestMapping("/")
public class IndexController {
@Value("${spring.profiles}")
private String profile;
@RequestMapping("/hello")
public String hello(String name) {
return "hello" + name + profile;
}
}
啓動註冊
- 三臺Provider都啓動成功
- 查看Eureka Server註冊信息,註冊成功
客戶端調用調試
- 分別進行三次請求,默認輪詢到Provider的三臺節點
Feign
簡單介紹
- Feign是一個聲明式Web Service客戶端。使用Feign能讓編寫Web Service客戶端更加簡單, 它的使用方法是定義一個接口,然後在上面添加註解,同時也支持JAX-RS標準的註解。
- Feign也支持可拔插式的編碼器和解碼器。Spring Cloud對Feign進行了封裝,使其支持了Spring MVC標準註解和HttpMessageConverters。
- Feign可以與Eureka和Ribbon組合使用以支持負載均衡。
Feign Client的簡單流程
- 首先通過@EnableFeignClients註解開啓FeignClient的功能,才能在程序啓動時開啓對@FeignClient註解的包掃描
- 根據Feign的規則實現接口,並在接口上加上@FeignClient註解
- 程序啓動時,進行包掃描,掃描@FeignClient註解的類,注入到IOC容器中
- 當接口被調用時,通過JDK的代理生成具體的RequestTemplate模板對象
- 根據RequestTemplate再生成Http請求的Request對象
- Request對象交由Client去處理,Client的網絡請求框架可以是:HttpURLConnection、HttpClient和OkHttp
- 最後Client被封裝到LoadBalanceClient類,該類結合Ribbon做到負載均衡