Java springcloud B2B2C o2o多使用者商城 springcloud架構-服務閘道器例項
阿新 • • 發佈:2018-12-21
1、Zuul環境搭建
需要JAVA Spring Cloud大型企業分散式微服務雲構建的B2B2C電子商務平臺原始碼請加企鵝求求 :二一四七七七五六三三
引入jar包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
在Application中開啟Zuul
@EnableZuulProxy
@SpringCloudApplication //整合了@SpringBootApplication、@EnableDiscoveryClient、@EnableCircuitBreaker,主要目的還是簡化配置
public class ZuulApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args);
}
}
Zuul環境搭建完畢之後,我們就可以來看他的主要功能了,包括服務路由和服務過濾。
2、路由配置
方法一:url配置
在application.properties中,進行如下配置。
zuul.routes.api-a-url.path=/api-a-url/**
zuul.routes.api-a-url.url=http://localhost:2222/
之後,我們就可以通過”/api-a-url”來代替”http://localhost:2222“進行訪問,類似修改本地hosts檔案來設定域名。這種方式遮蔽了ip和埠。
缺點: url路由粒度過粗。需要知道所有服務地址才能完成對映。
方法二:服務對映(serviceId)
既然eureka中已經有我們的配置資訊,那我們可以藉助他來完成地址對映。
zuul.routes.api-a.path=/api-a/**
zuul.routes.api-a.serviceId=compute-service
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
3、服務過濾
定義過濾
public class AccessFilter extends ZuulFilter {
/*filterType:返回一個字串代表過濾器的型別,在zuul中定義了四種不同生命週期的過濾器型別,具體如下:
pre:可以在請求被路由之前呼叫
routing:在路由請求時候被呼叫
post:在routing和error過濾器之後被呼叫
error:處理請求時發生錯誤時被呼叫
filterOrder:通過int值來定義過濾器的執行順序
shouldFilter:返回一個boolean型別來判斷該過濾器是否要執行,所以通過此函式可實現過濾器的開關。在上例中,我們直接返回true,所以該過濾器總是生效。
run:過濾器的具體邏輯。需要注意,這裡我們通過ctx.setSendZuulResponse(false)令zuul過濾該請求,不對其進行路由,然後通過ctx.setResponseStatusCode(401)設定了其返回的錯誤碼,當然我們也可以進一步優化我們的返回,比如,通過ctx.setResponseBody(body)對返回body內容進行編輯等。
*/
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
Object accessToken = request.getParameter("accessToken"); //定義規則:訪問url中必須帶有accessToken引數
if(accessToken == null) {
ctx.setSendZuulResponse(false);
ctx.setResponseStatusCode(401);
return null;
}
return null;
}
}
例項化
//例項化過濾器
@Bean
public AccessFilter accessFilter() {
return new AccessFilter();
}
啟動專案,如果訪問的url中不含有accessToken引數則會報錯,只有包含該引數的請求url才會被放行。
4、小結
Zuul的主要功能:負載均衡、服務路由、服務過濾等,並不是新鮮的東西。api gateway類似外觀模式,提供統一的入口。負載均衡和路由和Nginx的功能很像,過濾和許可權管理類似shiro的許可權配置。
微服務java b2b商城系統_java商城原始碼100%開源適合2次開發