淘东电商项目(11) -Apollo分布式配置中心管理Swagger

简介: 淘东电商项目(11) -Apollo分布式配置中心管理Swagger

引言

在上一节《淘东电商项目(10) -Apollo分布式配置中心管理application.yml》,主要讲解了把微服务项目的application.yml配置托管到Apollo分布式配置中心托管。

代码已提交至Github(版本号:3bc1cd6540ba8bd6b7fb67051d3c9eb048effce0),有兴趣的同学可以下载来看看:https://github.com/ylw-github/taodong-shop

本文继续讲解分布式基础设施环境的搭建,主要讲解如何把网关的Swagger配置托管至Apollo配置中心。

阅读本文之前,建议先阅读如下前面的两篇博客:

《淘东电商项目(05) - Swagger及网关统一管理API》

《淘东电商项目(10) -Apollo分布式配置中心管理application.yml》

本文目录结构:

l____引言

l____ 1. Apollo管理网关项目的application.yml

l____ 2. Apollo管理Swagger

l________ 2.1 Apollo配置Swagger

l________ 2.2 项目代码配置动态获取Swagger信息

l____ 3. 测试

l____总结

1. Apollo管理网关项目的application.yml

step1: 网关项目添加apollo的maven依赖:

<dependency>
  <groupId>com.ctrip.framework.apollo</groupId>
  <artifactId>apollo-client</artifactId>
  <version>1.0.0</version>
</dependency>
<dependency>
  <groupId>com.ctrip.framework.apollo</groupId>
  <artifactId>apollo-core</artifactId>
  <version>1.0.0</version>
</dependency>

step2: 启动类允许Apollo配置@EnableApolloConfig

@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
@EnableSwagger2Doc
@EnableApolloConfig
public class AppGateWay {
  //省略此处代码。。。
}

step3: Apollo新建项目

step4: 配置文件转换后,粘贴至Apollo网关项目,并发布:

step5: 新增application.properties,内容如下:

app.id=app-basics-zuul
apollo.meta=http://192.168.162.135:8080

step6: 启动项目,可以看到网关服务正常启动:

2. Apollo管理Swagger

我们看一下网关服务的启动类代码,可以看到swagger的配置代码都是写死的,那么如何配置到Apollo呢?

2.1 Apollo配置Swagger

可以自定义Swagger文档配置:taodong-shop.zuul.swagger.document,每个微服务的配置文件,以json数组的格式保存内容如下。

[
    {
        "name": "taodong-shop-service-member",
        "location": "/taodong-shop-service-member/v2/api-docs",
        "version": "2.0"
    },
    {
        "name": "taodong-shop-service-weixin",
        "location": "/taodong-shop-service-weixin/v2/api-docs",
        "version": "2.0"
    }
]

然后在Apollo添加配置:

发布:

2.2 项目代码配置动态获取Swagger信息

Apollo的配置已经完成了,那么代码该如何配置呢?下面直接贴上代码:

@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
@EnableSwagger2Doc
@EnableApolloConfig
public class AppGateWay {
    // 获取ApolloConfig
    @ApolloConfig
    private Config appConfig;
    public static void main(String[] args) {
        SpringApplication.run(AppGateWay.class, args);
    }
    // 添加文档来源
    @Component
    @Primary
    class DocumentationConfig implements SwaggerResourcesProvider, ConfigChangeListener {
        @Override
        public List<SwaggerResource> get() {
            // 开启监听,配置文件发生改变需要更改,onChange()回调
            appConfig.addChangeListener(DocumentationConfig.this);
            return resources();
        }
        @Override
        public void onChange(ConfigChangeEvent configChangeEvent) {
            get();
        }
        /**
         * 从阿波罗服务器中获取resources
         *
         * @return
         */
        private List<SwaggerResource> resources() {
            List resources = new ArrayList<>();
            // app-itmayiedu-order
            // 网关使用服务别名获取远程服务的SwaggerApi
            String swaggerDocJson = swaggerDocument();
            JSONArray jsonArray = JSONArray.parseArray(swaggerDocJson);
            for (Object object : jsonArray) {
                JSONObject jsonObject = (JSONObject) object;
                String name = jsonObject.getString("name");
                String location = jsonObject.getString("location");
                String version = jsonObject.getString("version");
                resources.add(swaggerResource(name, location, version));
            }
            return resources;
        }
        /**
         * 获取swaggerDocument配置
         *
         * @return
         */
        private String swaggerDocument() {
            String property = appConfig.getProperty("taodong-shop.zuul.swagger.document", "");
            return property;
        }
        private SwaggerResource swaggerResource(String name, String location, String version) {
            SwaggerResource swaggerResource = new SwaggerResource();
            swaggerResource.setName(name);
            swaggerResource.setLocation(location);
            swaggerResource.setSwaggerVersion(version);
            return swaggerResource;
        }
    }
}

3. 测试

step1:依次启动微信服务、会员服务、网关服务

step2:浏览器访问http://localhost/swagger-ui.html#/,可以看到Swagger能正常显示两个微服务的文档,配置已经成功托管到了Apollo。

step3:在配置中心里移除掉会员服务,就是把配置信息改为如下,并发布:

[
    {
        "name": "taodong-shop-service-weixin",
        "location": "/taodong-shop-service-weixin/v2/api-docs",
        "version": "2.0"
    }
]

step4:浏览器访问http://localhost/swagger-ui.html# ,可以看到选项里只有微信服务了:

总结

目录
相关文章
|
2月前
|
机器学习/深度学习 监控 算法
分布式光伏储能系统的优化配置方法(Matlab代码实现)
分布式光伏储能系统的优化配置方法(Matlab代码实现)
122 1
|
1月前
|
编解码 运维 算法
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
143 12
|
8月前
|
缓存 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
951 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
|
7月前
|
安全 网络安全 数据库
YashanDB分布式节点间SSL连接配置
本文介绍YashanDB分布式节点间SSL连接配置方法,确保通信安全。需统一为整个集群配置SSL,使用相同根证书签名的服务器证书,否则可能导致连接失败或数据库无法启动。文章详细说明了使用OpenSSL生成根证书、服务器私钥、证书及DH文件的步骤,并指导如何将证书分发至各节点。最后,通过配置数据库参数(如`din_ssl_enable`)并重启集群完成设置。注意,证书过期需重新生成以保障安全性。
|
9月前
|
安全 开发工具 git
git分布式版本控制系统及在码云上创建项目并pull和push
通过本文的介绍,我们详细讲解了Git的基本概念和工作流程,并展示了如何在码云上创建项目及进行pull和push操作。Git作为一种分布式版本控制系统,为开发者提供了强大的工具来管理代码变更和协作开发。希望本文能帮助您更好地理解和使用Git及码云,提高开发效率和代码质量。
345 18
|
9月前
|
安全 开发工具 git
git分布式版本控制系统及在码云上创建项目并pull和push
通过本文的介绍,我们详细讲解了Git的基本概念和工作流程,并展示了如何在码云上创建项目及进行pull和push操作。Git作为一种分布式版本控制系统,为开发者提供了强大的工具来管理代码变更和协作开发。希望本文能帮助您更好地理解和使用Git及码云,提高开发效率和代码质量。
253 16
|
12月前
|
数据库
如何在Seata框架中配置分布式事务的隔离级别?
总的来说,配置分布式事务的隔离级别是实现分布式事务管理的重要环节之一,需要认真对待和仔细调整,以满足业务的需求和性能要求。你还可以进一步深入研究和实践 Seata 框架的配置和使用,以更好地应对各种分布式事务场景的挑战。
386 63
|
9月前
|
SQL 数据建模 BI
【YashanDB 知识库】用 yasldr 配置 Bulkload 模式作单线程迁移 300G 的业务数据到分布式数据库,迁移任务频繁出错
问题描述 详细版本:YashanDB Server Enterprise Edition Release 23.2.4.100 x86_64 6db1237 影响范围: 离线数据迁移场景,影响业务数据入库。 外场将部分 NewCIS 的报表业务放到分布式数据库,验证 SQL 性能水平。 操作系统环境配置: 125G 内存 32C CPU 2T 的 HDD 磁盘 问题出现的步骤/操作: 1、部署崖山分布式数据库 1mm 1cn 3dn 单线启动 yasldr 数据迁移任务,设置 32 线程的 bulk load 模式 2、观察 yasldr.log 是否出现如下错
|
10月前
|
消息中间件 负载均衡 Java
如何设计一个分布式配置中心?
这篇文章介绍了分布式配置中心的概念、实现原理及其在实际应用中的重要性。首先通过一个面试场景引出配置中心的设计问题,接着详细解释了为什么需要分布式配置中心,尤其是在分布式系统中统一管理配置文件的必要性。文章重点分析了Apollo这一开源配置管理中心的工作原理,包括其基础模型、架构模块以及配置发布后实时生效的设计。此外,还介绍了客户端与服务端之间的交互机制,如长轮询(Http Long Polling)和定时拉取配置的fallback机制。最后,结合实际工作经验,分享了配置中心在解决多台服务器配置同步问题上的优势,帮助读者更好地理解其应用场景和价值。
535 18

热门文章

最新文章