目錄
- zuul
- 系統架構和zuul的作用
- zuul網關實現
- 配置映射路徑
- 過濾器
- Config
- 概述
- 云端管理
- 本地配置
zuul
zuul是分布式和集群后前端統一訪問入口
系統架構和zuul的作用
zuul把自己注冊進eureka,然后可通過前端傳來的服務名發現和訪問對應的服務集群
為了預防zuul單點故障,zuul也要做集群,所以要在前面再加個nginx反向代理,nginx本身也有負載均衡的作用
為了預防nginx單點故障,由keepalived管理,配置主備切換,配置相同的虛擬ip給前端訪問
正常開發只需要負責到zuul層,keepalived和nginx由運維搭
zuul網關實現
創建新模塊zuul-gateway-2010
導包
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</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>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId></dependency>
application.yml
server:port: 2010
spring:application:name: zuul-gateway
eureka:client:service-url:defaultZone: http://eureka1:1010/eureka,http://eureka2:1020/eureka,http://eureka3:1030/eurekainstance:instance-id: zuul:2010prefer-ip-address: false
啟動類
@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy //zuul網關的注解
public class ZuulApp {public static void main(String[] args) {SpringApplication.run(ZuulApp.class,args);}
}
啟動eureka集群,生產者和網關,瀏覽器訪問測試:http://localhost:2010/user-provider/user/provider/3
配置映射路徑
可隱藏服務名,加前綴
瀏覽器訪問測試:http://localhost:2010/services/myUser/user/provider/100
過濾器
核心方法,執行流程和使用場景見文檔3.4.1,3.4.2,3.4.3
代碼實現
@Component
public class LoginFilter extends ZuulFilter {//過濾器類型 pre 前置 routing 路由 post 后置 error 錯誤@Overridepublic String filterType() {return "pre";}//執行的順序 數字越小 越先執行@Overridepublic int filterOrder() {return 0;}//判斷該過濾器是否需要執行@Overridepublic boolean shouldFilter() {return true;}//業務邏輯 例如登錄的token驗證@Overridepublic Object run() throws ZuulException {//獲取當前請求上下文RequestContext context = RequestContext.getCurrentContext();//從上下文里面獲取請求對象HttpServletRequest request = context.getRequest();String token = request.getHeader("token");if (token==null||"".equals(token.trim())){//返回錯誤的結果context.setSendZuulResponse(false);//設置響應碼context.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());}//不為空,去redis里面查詢return null;}
}
瀏覽器不帶token訪問和postman帶token訪問測試:http://localhost:2010/services/myUser/user/provider/101
zuul自帶負載均衡和斷路器,配置即可
tips:這里的負載均衡和斷路器作用于前端通過zuul訪問服務集群,不同于之前的消費者訪問生產者集群
zuul:retryable: true
ribbon:ConnectTimeout: 250 # 連接超時時間(ms)ReadTimeout: 2000 # 通信超時時間(ms)OkToRetryOnAllOperations: true # 是否對所有操作重試MaxAutoRetriesNextServer: 2 # 同一服務不同實例的重試次數MaxAutoRetries: 1 # 同一實例的重試次數
hystrix:command:default:execution:isolation:thread:timeoutInMillisecond: 3000 # 熔斷超時時長:3000ms
Config
概述
見文檔4.2.1,4.2.2
云端管理
1.Gitee創建倉庫
添加文件application-zuul-test.yml,復制配置文件內容到其中,端口2010
添加文件application-zuul-dev.yml,復制配置文件內容到其中,可改動端口為2020做區分
2.新建項目config-server-3010,
導包
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!--配置中心支持--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency>
配置
server:port: 3010
spring:application:name: config-servercloud:config:server:git:uri: https://gitee.com/ming-feng/config-center.gitusername: 513585429@qq.compassword: ***********
啟動類
@SpringBootApplication
@EnableConfigServer //啟用配置服務端
public class ConfigServerApp {public static void main(String[] args) {SpringApplication.run(ConfigServerApp.class);}
}
啟動項目,瀏覽器訪問測試:http://localhost:3010/application-zuul-dev.yml或
http://localhost:3010/application-zuul/test
3.以zuul項目為例,修改配置文件名讓原來的配置文件失效
導包
<!--configclient端--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency>
添加配置文件bootstrap.yml
spring:cloud:config:name: application-zuul #gitee上面名稱profile: dev #環境label: master #分支uri: http://127.0.0.1:3010 #配置服務器
啟動項目,瀏覽器可訪問測試:http://localhost:2020/services/myUser/user/provider/104
本地配置
克隆gitee項目到本地電腦
configserver項目添加本地文件路徑配置
server:port: 3010
spring:application:name: config-server
# cloud:
# config:
# server:
# git:
# uri: https://gitee.com/ming-feng/config-center.git
# username: 513585429@qq.com
# password: gt513585429cloud:config:server:native: #在本地目錄搜索search-locations: file:D:\\code\\config-centerprofiles:active: native
重啟configserver
瀏覽器訪問測試:http://localhost:3010/application-zuul-dev.yml