本文不涉及技術(shù)牲迫,只是單純的一個(gè)小技巧豌汇。
閱讀本文前,你需要對(duì)spring-cloud-zuul充岛、spring-cloud-eureka保檐、以及swagger的配置和使用有所了解。
如果你的系統(tǒng)也是用zuul作為分布式系統(tǒng)的網(wǎng)關(guān)崔梗,同時(shí)使用swagger生成文檔夜只,想把整個(gè)系統(tǒng)的文檔整合在同一個(gè)頁面上,可以參考本文炒俱。
項(xiàng)目結(jié)構(gòu)
eureka-server:eureka服務(wù)注冊中心盐肃,端口8080,
zuul-server:zuul網(wǎng)關(guān),端口8081
payment-server:支付系統(tǒng)权悟,端口8082
order-server:訂單系統(tǒng)砸王,端口8083
order-server1:訂單系統(tǒng),端口8084
order-server2:訂單系統(tǒng)峦阁,端口8085
其中order-server谦铃、order-server1、order-server2組成訂單系統(tǒng)集群榔昔。
下面是運(yùn)行后的效果圖:
打開zuul的swagger首頁http://localhost:8081/swagger-ui.html
實(shí)現(xiàn)方法
zuul-server
路由配置
zuul:
routes:
payment-server:
path: /pay/**
order-server:
path: /order/**
swagger配置類SwaggerConfig
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("分布式購物系統(tǒng)")
.description("購物系統(tǒng)接口文檔說明")
.termsOfServiceUrl("http://localhost:8081")
.contact(new Contact("vker", "", "6492178@gmail.com"))
.version("1.0")
.build();
}
@Bean
UiConfiguration uiConfig() {
return new UiConfiguration(null, "list", "alpha", "schema",
UiConfiguration.Constants.DEFAULT_SUBMIT_METHODS, false, true, 60000L);
}
}
重點(diǎn):swagger文檔資源配置類DocumentationConfig
@Component
@Primary
public class DocumentationConfig implements SwaggerResourcesProvider {
@Override
public List<SwaggerResource> get() {
List resources = new ArrayList<>();
resources.add(swaggerResource("訂單系統(tǒng)", "/order/v2/api-docs", "2.0"));
resources.add(swaggerResource("支付系統(tǒng)", "/pay/v2/api-docs", "2.0"));
return resources;
}
private SwaggerResource swaggerResource(String name, String location, String version) {
SwaggerResource swaggerResource = new SwaggerResource();
swaggerResource.setName(name);
swaggerResource.setLocation(location);
swaggerResource.setSwaggerVersion(version);
return swaggerResource;
}
}
可以看出來實(shí)現(xiàn)的重點(diǎn)就在DocumentationConfig
中驹闰,通過配置文檔資源,當(dāng)在首頁下拉框選擇訂單系統(tǒng)時(shí)撒会,會(huì)請(qǐng)求http://localhost:8081/order/v2/api-docs獲取文檔詳情嘹朗,而根據(jù)zuul的路由配置,zuul會(huì)將/order/**請(qǐng)求路由到serviceId為order-server
的系統(tǒng)上诵肛。而且由于order-server是一個(gè)集群屹培,就算其中一臺(tái)服務(wù)掛掉,也不會(huì)影響到文檔的獲取。
order-server
swagger配置類SwaggerConfig
,order-server
褪秀、payment-server
swagger配置基本相同蓄诽。
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("w.m.vker.demo"))
.apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("訂單系統(tǒng)api")
.description("訂單系統(tǒng)接口文檔說明")
.contact(new Contact("vker", "", "6492178@gmail.com"))
.version("1.0")
.build();
}
@Bean
UiConfiguration uiConfig() {
return new UiConfiguration(null, "list", "alpha", "schema",
UiConfiguration.Constants.DEFAULT_SUBMIT_METHODS, false, true, 60000L);
}
}
swagger整合xrebel
xrebel是一款web調(diào)試工具,可以參考教程XRebel使用教程媒吗。
xrebel的工作原理是追蹤頁面的各種請(qǐng)求分析整個(gè)請(qǐng)求的流程和消耗時(shí)間仑氛,而swagger則提供了頁面在線接口調(diào)試功能唾戚,將兩則結(jié)合起來按摘,可以快速調(diào)試接口的同時(shí)分析接口的流程和缺陷,可謂是如虎添翼。
如圖:
點(diǎn)擊swagger的try it out時(shí) 左下角的xrebel工具欄會(huì)記錄發(fā)起的請(qǐng)求詳情仪芒。
當(dāng)我多次調(diào)用訂單系統(tǒng)接口的時(shí)候自阱,xrebel甚至可以顯示zuul將這個(gè)請(qǐng)求通過負(fù)載均衡分發(fā)到哪一個(gè)服務(wù)上嚎莉,如圖:
實(shí)現(xiàn)方法
將xrebel集成到zuul-server啟動(dòng)的vm options參數(shù)中,在zuul其中成功后,打開http://localhost:8081/xrebel頁面沛豌,想頁面正下方中央的文本框內(nèi)的js代碼
<script>
window.XREBEL_SERVERS = ['http://localhost:8081'];
(function() {
const script = document.createElement('script');
script.src = window.XREBEL_SERVERS[0] + '/a65f4bf22bdd793dca6963ffe7fa0c62/resources/init.min.js';
document.body.appendChild(script);
}());
</script>
復(fù)制出來。然后找到springfox-swagger-ui依賴的jar包赃额,如果使用maven管理加派,則jar包的位置在maven倉庫路徑\io\springfox\springfox-swagger-ui\版本號(hào)
的文件夾下,將jar包用解壓后找到swagger-ui.html文件跳芳,將之前的復(fù)制的js文件粘貼到里面芍锦,然后運(yùn)行zuul-server,就可以在swagger首頁http://localhost:8081/swagger-ui.html看到左下角出現(xiàn)這個(gè)可愛的工具欄啦飞盆。
最后附上代碼地址:https://github.com/91wangmeng/spring-boot-swagger-distributed-demo.git