最近nacos非常火,很多使用eureka的都替换成nacos,既可以做注册中心也可以做配置中心,除此之外还有更好用的功能,今天说一下nacos和gateway做动态路由。

动态路由网上一搜一大堆,真正好使的没几个,其实有更加直接的方式,nacos已经提供了。下面我们一步步看看动态路由怎么配置。

一、Nacos + Gateway动态网关

1.1 引入nacos依赖

在你的gateway项目,和其他微服务中引入nacos,分别是注册中心和配置中心。

        com.alibaba.cloud            spring-cloud-starter-alibaba-nacos-discovery            ${nacos.version}com.alibaba.cloud            spring-cloud-starter-alibaba-nacos-config            ${nacos.version}
 2.2.1.RELEASE

1.2 gateway配置文件

重点就在以下配置文件的带注释的这一行,这个可以主动将注册中心的服务拉取到网关作为路由,当新服务注册到naocs,会直接添加到网关路由中;从nacos下线的服务会从网关中去除。对比网上增加配置文件,以及代码的动态网关要方便很多。并且不需要在网关中配置路由信息。

spring:  profiles:    active: dev  application:    name: bssp-gateway-service  cloud:    nacos:      config:        server-addr: 127.0.0.1:8848        namespace: 3a44ef28-b35c-44bb-8cd2-873c14ebc911        group: DEFAULT_GROUP        file-extension: yml      discovery:        server-addr: 127.0.0.1:8848        namespace: 3a44ef28-b35c-44bb-8cd2-873c14ebc911    gateway:      discovery:        locator:          enabled: true # 开启从注册中心动态创建路由的功能,利用微服务名进行路由

1.3 服务调用

通过网关加服务名称调用服务接口:

http://localhost:8888/bssp-user-service/user/info/getById?id=1

结果:

{    "code": 0,    "data": {        "limit": null,        "page": null,        "id": "1",        "nickname": "weirx",        "realName": "--",        "username": "weirx",        "password": "$2a$10$syz1K7t47gJZ79cIs7o0gOvS6hQO7AMlOlEWWKtxtrlJ/jLRRj4iy",        "sex": 1,        "phone": "13339411800",        "certificatesType": 1,        "certificatesNum": 230523199203134013,        "address": null,        "source": 1,        "isDelete": 0,        "createTime": "2020-07-23 14:06:56",        "updateTime": null    },    "msg": "操作成功"}

二、网关整合knife4j

2.1 引入依赖

在每个服务和网关中引入以下依赖

                com.github.xiaoymin            knife4j-spring-boot-starter            2.0.3

2.2 配置文件

在每个服务中增加以下配置,gateway除外,用于在接口界面展示基本信息。

swagger:  enabled: true  title: 用户服务  base-package: com.cloud.bssp.admin  version: V1.0  description: 后台admin服务  license: Apache License, Version 2.0  license-url: https://www.apache.org/licenses/LICENSE-2.0.html  terms-of-service-url: http://localhost:8002/doc.html  contact: xxxxxxxxxxxx@gmail.com  authorization: #有auth2 并使用以前的swagger-ui    key-name: Authorization

2.3 增加两个类

package com.cloud.bssp.gateway.config;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.HttpStatus;import org.springframework.http.ResponseEntity;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import reactor.core.publisher.Mono;import springfox.documentation.swagger.web.*;import java.util.Optional;@RestController@RequestMapping("/swagger-resources")public class SwaggerHandler {    /**     * 权限配置,没有的不用关注     */    @Autowired(required = false)    private SecurityConfiguration securityConfiguration;    @Autowired(required = false)    private UiConfiguration uiConfiguration;    private final SwaggerResourcesProvider swaggerResources;    @Autowired    public SwaggerHandler(SwaggerResourcesProvider swaggerResources) {        this.swaggerResources = swaggerResources;    }    @GetMapping("/configuration/security")    public Mono> securityConfiguration() {        return Mono.just(new ResponseEntity<>(                Optional.ofNullable(securityConfiguration).orElse(SecurityConfigurationBuilder.builder().build()), HttpStatus.OK));    }    @GetMapping("/configuration/ui")    public Mono> uiConfiguration() {        return Mono.just(new ResponseEntity<>(                Optional.ofNullable(uiConfiguration).orElse(UiConfigurationBuilder.builder().build()), HttpStatus.OK));    }    /**     * 获取接口信息     * @date: 2020/12/3     * @param     * @return reactor.core.publisher.Mono     * @author weirx     * @version 3.0     */    @GetMapping("")    public Mono swaggerResources() {        return Mono.just((new ResponseEntity<>(swaggerResources.get(), HttpStatus.OK)));    }}
package com.cloud.bssp.gateway.config;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.cloud.gateway.route.RouteLocator;import org.springframework.stereotype.Component;import springfox.documentation.swagger.web.SwaggerResource;import springfox.documentation.swagger.web.SwaggerResourcesProvider;import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util.Set;@Componentpublic class SwaggerProvider implements SwaggerResourcesProvider {    /**     * 接口地址     */    public static final String API_URI = "/v2/api-docs";    /**     * 路由加载器     */    @Autowired    private RouteLocator routeLocator;    /**     * 网关应用名称     */    @Value("${spring.application.name}")    private String applicationName;    @Override    public List get() {        //接口资源列表        List resources = new ArrayList<>();        //服务名称列表        List routeHosts = new ArrayList<>();        // 获取所有可用的应用名称        routeLocator.getRoutes().filter(route -> route.getUri().getHost() != null)                .filter(route -> !applicationName.equals(route.getUri().getHost()))                .subscribe(route -> routeHosts.add(route.getUri().getHost()));        // 去重,多负载服务只添加一次        Set existsServer = new HashSet<>();        routeHosts.forEach(host -> {            // 拼接url            String url = "/" + host + API_URI;            //不存在则添加            if (!existsServer.contains(url)) {                existsServer.add(url);                SwaggerResource swaggerResource = new SwaggerResource();                swaggerResource.setUrl(url);                swaggerResource.setName(host);                resources.add(swaggerResource);            }        });        return resources;    }}

2.4 结果

访问以下地址:http://localhost:8888/doc.html

nacos 下线接口_微服务架构nacos注册中心为什么那么火相关推荐

  1. 微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关

    微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关 1. 微服务简介 1.1 服务架构演变 1.2 SpringCloud ...

  2. nacos 本地测试_微服务架构系列之Nacos 配置核心概念

    上次讲了<微服务架构之Nacos配置中心之配置MySQL数据库>,本次讲述Nacos 配置核心概念.原作者:哈喽沃德先生,谢谢关注哈喽沃德先生. 1.配置 为什么需要配置?概念. 在系统开 ...

  3. 微服务架构:注册中心 ZooKeeper、Eureka、Consul 、Nacos 对比!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 前言 服务注册中心本质上是为了解耦服务提供者和服务消费者. ...

  4. 微服务架构之注册中心

    假设你发布了一个服务,并且已经在一台机器上部署了服务,那如果我想调用这个服务,我该如何知道你部署的这台机器的地址呢? 这个问题就跟我想去吃肯德基一样,我可以去谷歌地图上搜索肯德基,然后谷歌地图会返回所 ...

  5. 微服务架构02-nacos注册中心

    目录 Nacos注册中心简介 背景分析 Nacos概述 构建Nacos服务 准备工作 ​ 下载与安装 初始化配置 服务启动与访问 服务注册与调用入门(重点) 业务描述 生产者服务创建及注册 消费者服务 ...

  6. spring cloud+dotnet core搭建微服务架构:配置中心续(五)

    前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这 ...

  7. 2017微服务 mysql集群_微服务架构系列之Nacos集群搭建

    上回我们说到了<微服务架构系列之Nacos 配置核心概念>,这次我们讲讲Nacos 集群环境搭建. 集群模式跟我们平时进行扩容是一样的,可以通过 Nginx 转发到多个节点,如下图: 如果 ...

  8. nacos linux启动_微服务系列之Nacos配置中心之一:Nacos介绍与安装

    一.Nacos 介绍 Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理.英文全称 Dynamic Naming and Configuration Servi ...

  9. Linux启动nacos成功日志_微服务系列之Nacos配置中心

    Nacos 介绍 Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理.英文全称 Dynamic Naming and Configuration Service ...

最新文章

  1. 【第20周复盘】转换思路,让更多的小朋友们参与进来!
  2. python如何对两个矩阵进行拼接_Python合并两个numpy矩阵
  3. es每次结果不一样_电子血压计不准!每次测血压都不一样……
  4. HDU 4283:You Are the One(区间DP)
  5. QT的QMultiHash类的使用
  6. Ulua_toLua_基本案例(八)_LuaAccessingArray
  7. zstack 第一个例子
  8. 再获数千万融资,湃方科技将工业智联革命进行到底
  9. (转)C# Color类图示
  10. 树莓派4B安装ffmpeg的方法
  11. 什么是P问题、NP问题和NPC问题
  12. 微信小程序轮播中的current_五分钟掌握微信小程序轮播图
  13. oracle设置优化update,oracle update优化
  14. 程序员副业那些事:聊聊出书和录视频
  15. Linux系统中dmesg命令使用详解
  16. 银河麒麟高级服务器操作系统V10下载安装及安装docker
  17. spring中的aop的xml配置方式简单实例
  18. 拼图游戏(8 puzzle)
  19. uniapp uview 图片上传
  20. 打电话一直显示服务器错误是为什么,打电话总是显示连接失败如何解决

热门文章

  1. Matlab 变量保存csv:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xfb in position 4: illegal multiby
  2. python 读取excel太慢_实用技巧——Python实现从Excel读取数据并绘制成图像
  3. enq: tt - contention_时空中的绘旅人tt游戏下载-时空中的绘旅人tt客户端下载v1.0.16 安卓版...
  4. HoloLens 2开发:HoloLens开发VS安装与配置
  5. Angular中响应式表单 FormBuilder、FormControl 、FormGroup、FormArray、setControl、setValue用法总结
  6. Open3d之RGBD测程法
  7. 来,膜拜下android roadmap,强大的执行力
  8. java----动态绑定
  9. 【CF311E】biologist
  10. 8篇文章系统梳理ARM开发中的文件类型