SpringCloud 學習筆記11--SpringCloud Nginx +Zuul網關集羣和集成Swagger管理微服務接口

摘自:螞蟻課堂:http://www.mayikt.com/course/video/2424

1、搭建Nginx+Zuul實現高性能網關

      Zginx + Zuul (多個網關),實現一主一備或者輪詢。在微服務中,所有服務請求都會統一請求到Zuul網關上。

原理:客戶端發送請求,統一到nginx上,再使用nginx實現反響代理和負載均衡,採用輪詢算法轉發到網關上,最後由網關再次進行本地負載均衡把請求分發到具體的服務上去。如下圖:

2、基於Nginx實現Zuul集羣環境

 (1)Nginx配置服務器集羣實現負載均衡這裏就不說了(用upstream聲明Zuul網關服務器組),默認是輪詢策略。

      可參考:https://mp.csdn.net/postedit/79537976

 (2)爲什麼不用nginx實現網關呢?(nginx採用的是c語言,lua寫腳本)

             因爲微服務網關是針對與整個微服務實現統一請求攔截,網關基本上都採用自己熟悉的語言開發,目的是方便易學。

3、使用Swagger自動生成API文檔

     爲了前後端能夠更好的集成與對接,同時爲了項目的方便交付,每個項目都需要提供相應的api文檔。

     Swagger優點:

          (1)功能豐富:支持多種註解,自動生成接口文檔界面,支持在界面測試api接口功能。

          (2)及時更新:開發過程中花一點寫註釋的時間,就可以及時的更新api文檔。

          (3)整合簡單:通過添加pom依賴和簡單配置,內嵌於應用中就可同時發佈api接口文檔界面,不需要部署獨立服務。

4、Zuul整合Swagger管理整個微服務API文檔

        (1)SpringBoot整合Swagger

              pom.xml引入依賴:

<!-- springboot整合web組件 -->
  	<dependency>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-web</artifactId>
	</dependency>
  	<!-- swagger2 -->
  	<dependency>
  		<groupId>io.springfox</groupId>
  		<artifactId>springfox-swagger2</artifactId>
  		<version>2.8.0</version>
  	</dependency>
 	 <!-- swagger-ui -->
  	<dependency>
  		<groupId>io.springfox</groupId>
  		<artifactId>springfox-swagger-ui</artifactId>
  		<version>2.8.0</version>
  	</dependency>
  	

     properties或yml配置服務端口及名稱:

##服務端口
server.port=6086
##服務名稱
spring.application.name=springboot-swagger

建立swagger配置類:

@Configuration
@EnableSwagger2
public class SwaggerConfig {
	
	public Docket createRestApi(){
		//生成api掃描包
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
				.apis(RequestHandlerSelectors.basePackage("com.gonghua.controller")).paths(PathSelectors.any()).build();
	}
	
	private ApiInfo apiInfo(){
		return new ApiInfoBuilder()
				.title("XXXX管理系統")
				.description("xxxx系統|xxxx業務")
				.termsOfServiceUrl("鏈接地址")
				.version("1.0").build();
	}

}

 建立controller並加入註釋:加入@RequestMapping如下效果。所以根據需要添加指定的@GetMapping和@PostMapping。

     

 

如何傳遞參數呢?代碼如下getmember方法的代碼:

@Api("swagger服務層")
@RestController
public class SwaggerController {
	
	@ApiOperation("swagger測試接口")
	@GetMapping("/index")
	public String index(){
		return "welcome to my swagger";
	}
	
	//如何傳遞參數
	@ApiOperation("獲取member接口")
	@ApiImplicitParam(name="username",value="用戶請求參數",required=true,dataType="String")
	@PostMapping("/getMember")
	public String getMember(String username){
		return "getmember";
	}

}

 

 

(2)Zuul網關集羣集成Swagger

    (將整個微服務中的Swagger進行合成到統一服務器上,使用Zuul + Swagger實現管理整個微服務API文檔)

    SpringBoot支持對Swagger管理,只需要zuul網關添加對應服務Swagger文檔即可。

 操作步驟:

1、服務提供者和服務消費者添加pom依賴:

<!-- Swagger-spring-boot springboot對swagger的支持-->
  	<dependency>
  		<groupId>com.spring4all</groupId>
  		<artifactId>swagger-spring-boot-starter</artifactId>
  		<version>1.7.0.RELEASE</version>
  	</dependency>

  yml或properties配置掃描包範圍:

swagger.base-package=com.gonghua.controller

 啓動類添加@EnableSwagger2Doc註解,表示生成swagger文檔;

  對應的controller添加@Api註解,方法上添加@ApiOperation和@PostMapping註解

 

2、網關服務裏需要進行的操作:

   2.1、添加同上一樣的springboot對swagger支持的依賴jar包。

   2.2、啓動類裏添加如下代碼:

/**
	 * 添加文檔來源
	 */
	@Component
	@Primary
	class DocumentActionConfig implements SwaggerResourcesProvider{

		@Override
		public List<SwaggerResource> get() {
			List<SwaggerResource> resourcesList = new ArrayList<>();
			resourcesList.add(swaggerResource("app-memeber","/app-member/v1/api-docs","v1.0"));
			resourcesList.add(swaggerResource("app-order","/app-order/v1/api-docs","v1.0"));
			return resourcesList;
		}
		
		/**
		 * 
		 * @param name 訪問對應swagger api文檔的名稱
		 * @param location 訪問對應controller的地址
		 * @param version 版本
		 * @return
		 */
		private SwaggerResource swaggerResource(String name,String location,String version){
			SwaggerResource swaggerResource = new SwaggerResource();
			swaggerResource.setName(name);
			swaggerResource.setLocation(location);
			swaggerResource.setSwaggerVersion(version);
			return swaggerResource;
		}
		
	}

   啓動服務提供者、消費者、網關,訪問網關,即可看到集成好的網關的swagger。

發佈了29 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章