nacos 下线接口_微服务架构nacos注册中心为什么那么火
最近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注册中心为什么那么火相关推荐
- 微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关
微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关 1. 微服务简介 1.1 服务架构演变 1.2 SpringCloud ...
- nacos 本地测试_微服务架构系列之Nacos 配置核心概念
上次讲了<微服务架构之Nacos配置中心之配置MySQL数据库>,本次讲述Nacos 配置核心概念.原作者:哈喽沃德先生,谢谢关注哈喽沃德先生. 1.配置 为什么需要配置?概念. 在系统开 ...
- 微服务架构:注册中心 ZooKeeper、Eureka、Consul 、Nacos 对比!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 前言 服务注册中心本质上是为了解耦服务提供者和服务消费者. ...
- 微服务架构之注册中心
假设你发布了一个服务,并且已经在一台机器上部署了服务,那如果我想调用这个服务,我该如何知道你部署的这台机器的地址呢? 这个问题就跟我想去吃肯德基一样,我可以去谷歌地图上搜索肯德基,然后谷歌地图会返回所 ...
- 微服务架构02-nacos注册中心
目录 Nacos注册中心简介 背景分析 Nacos概述 构建Nacos服务 准备工作 下载与安装 初始化配置 服务启动与访问 服务注册与调用入门(重点) 业务描述 生产者服务创建及注册 消费者服务 ...
- spring cloud+dotnet core搭建微服务架构:配置中心续(五)
前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这 ...
- 2017微服务 mysql集群_微服务架构系列之Nacos集群搭建
上回我们说到了<微服务架构系列之Nacos 配置核心概念>,这次我们讲讲Nacos 集群环境搭建. 集群模式跟我们平时进行扩容是一样的,可以通过 Nginx 转发到多个节点,如下图: 如果 ...
- nacos linux启动_微服务系列之Nacos配置中心之一:Nacos介绍与安装
一.Nacos 介绍 Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理.英文全称 Dynamic Naming and Configuration Servi ...
- Linux启动nacos成功日志_微服务系列之Nacos配置中心
Nacos 介绍 Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理.英文全称 Dynamic Naming and Configuration Service ...
最新文章
- 【第20周复盘】转换思路,让更多的小朋友们参与进来!
- python如何对两个矩阵进行拼接_Python合并两个numpy矩阵
- es每次结果不一样_电子血压计不准!每次测血压都不一样……
- HDU 4283:You Are the One(区间DP)
- QT的QMultiHash类的使用
- Ulua_toLua_基本案例(八)_LuaAccessingArray
- zstack 第一个例子
- 再获数千万融资,湃方科技将工业智联革命进行到底
- (转)C# Color类图示
- 树莓派4B安装ffmpeg的方法
- 什么是P问题、NP问题和NPC问题
- 微信小程序轮播中的current_五分钟掌握微信小程序轮播图
- oracle设置优化update,oracle update优化
- 程序员副业那些事:聊聊出书和录视频
- Linux系统中dmesg命令使用详解
- 银河麒麟高级服务器操作系统V10下载安装及安装docker
- spring中的aop的xml配置方式简单实例
- 拼图游戏(8 puzzle)
- uniapp uview 图片上传
- 打电话一直显示服务器错误是为什么,打电话总是显示连接失败如何解决
热门文章
- Matlab 变量保存csv:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xfb in position 4: illegal multiby
- python 读取excel太慢_实用技巧——Python实现从Excel读取数据并绘制成图像
- enq: tt - contention_时空中的绘旅人tt游戏下载-时空中的绘旅人tt客户端下载v1.0.16 安卓版...
- HoloLens 2开发:HoloLens开发VS安装与配置
- Angular中响应式表单 FormBuilder、FormControl 、FormGroup、FormArray、setControl、setValue用法总结
- Open3d之RGBD测程法
- 来,膜拜下android roadmap,强大的执行力
- java----动态绑定
- 【CF311E】biologist
- 8篇文章系统梳理ARM开发中的文件类型