01 基礎環境準備
02 一文讀懂Eureka
03 Zookeeper註冊中心
04 Consule註冊中心
05 Ribbon
06 OpenFegin
07 Hystrix全面解析
08 Gateway全面解析
09 Config配置中心
10 Bus消息總線
1 Feign是什麼
Feign是個聲明式 Webservice客戶端。使用Feign能讓編寫 Web Service客戶端更加簡單它的使用方法是定義一個服務接口然後在上面添加註解。 Feign也支持可拔插式的編碼器和解碼器。 Spring Cloud對 Feign進行了封裝,使其支持了 Spring MVC標準註解和 Httpmessage converters。 Feign可以與 Eureka和 Ribbon組合使用以支持負載均衡。
2 Feign能幹什麼
Feign旨在使編寫 Java Http客戶端變得更容易。前面在使用 Ribbon+ Resttemplatel時,利用 Resttemplate對htt請的封裝處理,形成了模版化的週用方法。但是在實際開發中,由於對服務依賴的調用可能不止一處,往往一個接口會被多處調用,所以通常都會針對每個微服務自行封裝一些客戶端類來包裝這些依賴服務的調用。所以, Feign在此基礎上做了進一步封裝,由他來幫助我們定義和實現依賴服務接口的定義。在 Feign的實現下,我們只需創建一個接口並使用註解的方式來配置它(以前是Dao接口上面標註 Mapper註解現在是一個微服務接口上面標註一個Feign註解即可),即可完成對服務提供方的接口綁定,簡化了使用 Spring cloud Ribbone時,自動封裝服務調用客戶端的開發量。
3 Feign集成了 Ribbon
利用 Ribbon維護了 Paymente的服務列表信息,並且通過輪詢實現了客戶端的負載均衡。而與 Ribbon不同的是,通過fign只需要定義服務綁定接口且以聲明式的方法,優雅而簡單的實現了服務調用
4 Fegin和OpenFegion區別
5使用
5.1 創建工程
5.2 pom
<dependencies>
<!--oepn fegin-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</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.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>com.zrs.springcloud</groupId>
<artifactId>commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
5.3 application.yml
server:
port: 8003
spring:
application:
name: fegin-client
eureka:
client:
#是否將自己註冊到EurekaServer
register-with-eureka: true
#是否從EurekaServer獲取已有的註冊服務
fetch-registry: true
#註冊地址
service-url:
defaultZone: http://localhost:7000/eureka/
instance:
instance-id: fegin-client
prefer-ip-address: true
5.4 Service
@Service
@FeignClient("PROVIDER-PAYMENT-SERVICE")
@RequestMapping("/ribbon")
public interface FeginService {
@GetMapping("/server")
String server();
}
5.5 Controller
@RestController
@RequestMapping("/fegin")
public class FeginController {
@Autowired
private FeginService feginService;
@GetMapping("")
public String payment(){
return feginService.server();
}
}
5.6 主程序
@SpringBootApplication
@EnableFeignClients
public class FeginApplication {
public static void main(String[] args) {
SpringApplication.run(FeginApplication.class);
}
}
5.7 啓動
5.8 測試,Fegin自動實現負載均衡
6 超時
6.1 修改provider-payment工程、provider-payment-slave工程的RibbonServerController
@RestController
@RequestMapping("/ribbon")
public class RibbonServerController {
@Value("${server.port}")
private String port;
@GetMapping("/server")
public String server(){
return "ribbon server port is "+port;
}
@GetMapping("/threeseconds")
public String threeseconds(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "hello word";
}
}
6.2 修改customer-fegin工程
(1) 修改FeginService
@Service
@FeignClient("PROVIDER-PAYMENT-SERVICE")
@RequestMapping("/ribbon")
public interface FeginService {
@GetMapping("/threeseconds")
String threeseconds();
@GetMapping("/server")
String server();
}
(2) 修改FeginController
@RestController
@RequestMapping("/fegin")
public class FeginController {
@Autowired
private FeginService feginService;
@GetMapping("")
public String payment(){
return feginService.server();
}
@GetMapping("/threeseconds")
public String threeseconds(){
return feginService.threeseconds();
}
}
6.3 測試 (沒有熱部署的要重啓)
http://localhost:8003/fegin/threeseconds
6.4 在application.yml配置文件添加如下配置
ribbon:
#處理請求的超時時間,默認爲1秒
ReadTimeout: 4000
#連接建立的超時時長,默認1秒
ConnectTimeout: 1000
7 日誌打印功能
7.1 日誌級別
NONE:默認的,不顯示任何日誌;
BASIC:僅記錄請求方法、URL、響應狀態碼及執行時間;
HEADERS:除了 BASIC中定義的信息之外,還有請求和響應的頭信息
FULL:除了與年 HEADERS I中定義的信息之外,還有請求和響應的正文及元款據
7.2 創建FeginConfig
@Configuration
public class FeginConfig {
@Bean
Logger.Level feginLoggerLevel(){
return Logger.Level.FULL;
}
}
7.3 在application.yml添加
logging:
level:
com.fegin.service.FeginService: debug
7.4 查看結果
GITHUB
#分支 OpenFegin-enviroment-release-v1.0
https://github.com/zhurongsheng666/spring-cloud-hoxton