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。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值