Spring Cloud之Swagger集群搭建

springboot 构建 spring cloud 微服务项目 搭建ARTHUR框架分享 在此分享下本人最近搭建的一个springcloud微服务项目,包括注册中心、配置中心、熔断器、turbine熔断器集中监控中心、fegin、前后端负载均衡、swagger2、网关等等。项目只是初步搭建,之后还会加入各种好玩的技术,会不定期更新,感兴趣的可下载进行研究交流,微服务的明天会更好。 阅读详情

Spring Cloud之Swagger集群搭建

 在微服务中,Swagger是每个服务 比如会员服务,订单服务,支付服务 进行继承、

如何将整个微服务中的Swagger进行合成,同一台服务器上。

 

使用Zuul+Swagger实现管理整个微服务API文档

使用Nginx+Swagger以不同的项目区分跳转到不同的接口文档

 

Spring Boot支持对Swagger管理,只需要Zuul网关添加对应服务Swagger文档即可

 

服务配置

1、会员服务和订单服务都引入对swagger的maven支持

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.8.0</version>
        </dependency>

                    

 

等于:(Spring Boot已经整合好了)

<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.7.0.RELEASE</version>
</dependency>

  

两者选择其一

 

然后启动类需要:

@EnableSwagger2Doc

 

接着,controller中需要:

类上注解

   @Api("订单接口")

接口方法上

 @ApiOperation("订单服务接口")
 @PostMapping("/getOrder")

 

yml加入扫包范围:

swagger:
     base-package: com.toov5.api

 

(每个服务都一样)

 

如Member:

 

 

package com.toov5.api.service.impl;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.toov5.api.entity.UserEntity;
import com.toov5.api.service.IMemberService;
import com.toov5.base.BaseApiService;
import com.toov5.base.ResponseBase;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;

  
@RestController
@Api("会员服务接口")
public class MemberServiceImpl extends BaseApiService implements IMemberService {
    @Value("${server.port}")
    private String serverPort; 
    
     @RequestMapping("/getMember")  
    public UserEntity getMember(@RequestParam("name") String name) {
        UserEntity userEntity = new UserEntity();
        userEntity.setName(name);
        userEntity.setAge(10);
        return userEntity;
    }
     
     @RequestMapping("/getUserInfo") 
     public ResponseBase getUserInfo() {
        try {
            Thread.sleep(1500);
        } catch (Exception e) {
            
        }
        return setResultSuccess("getUserInfo调用成功....");
    }
     
      
     @RequestMapping("/") 
     public String Index() {
        return "我是member"+serverPort;
    } 
     
        @ApiOperation(value = "获取会员信息接口") // 具体描述
        @ApiImplicitParam(name = "userName", value = "用户信息参数", required = true, dataType = "String") // 传入的参数 ,描述 , 必须传递true                                                                                                    // , 类型String
        @GetMapping("/getMemberInfo")
        public String getMemberInfo(String userName) {
            System.out.println(userName);
            return "userName" + userName;
        }
 
}

启动:

package com.toov5.api.service.impl;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

import com.spring4all.swagger.EnableSwagger2Doc;

@SpringBootApplication (scanBasePackages={"com.toov5.*"})
@EnableEurekaClient
@EnableFeignClients
@EnableSwagger2Doc //开启swagger文档)
public class AppMember {
  public static void main(String[] args) {
    SpringApplication.run(AppMember.class, args);
}
}

yml

server:
  port: 8005

spring:
    application:
        name: app-toov5-member
ַ
eureka:
  client:
    service-url:
           defaultZone: http://localhost:8100/eureka

           

    register-with-eureka: true

    fetch-registry: true

swagger:
  base-package:  com.toov5.api.service.impl

  

 

网关gateway配置:

也需要引入相同的pom

<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.7.0.RELEASE</version>
</dependency>

 

然后启动类:

package com.toov5;

import java.util.ArrayList;
import java.util.List;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;

import com.spring4all.swagger.EnableSwagger2Doc;

import springfox.documentation.swagger.web.SwaggerResource;
import springfox.documentation.swagger.web.SwaggerResourcesProvider;

@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy  //开启网关代理
@EnableSwagger2Doc  //开启swagger
public class AppGateway {
   public static void main(String[] args) {
   SpringApplication.run(AppGateway.class, args);     
}

       // 添加文档来源
       @Component
       @Primary
       class DocumentationConfig implements SwaggerResourcesProvider {
           public List<SwaggerResource> get() {
               List resources = new ArrayList<Object>();
                 //app-itmayiedu-order            
               resources.add(swaggerResource("app-toov5-member", "/api-member/v2/api-docs", "2.0")); // 第一个参数可以随便写 第二个参考yml对应
               resources.add(swaggerResource("app-toov5-order", "/api-order/v2/api-docs", "2.0"));
               return resources;
           }

           private SwaggerResource swaggerResource(String name, String location, String version) {
               SwaggerResource swaggerResource = new SwaggerResource();
               swaggerResource.setName(name);
               swaggerResource.setLocation(location);
               swaggerResource.setSwaggerVersion(version);
               return swaggerResource;
           }
       }

   }

yml配置:

###注册 中心
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8100/eureka/
server:  ##api网关端口号
  port: 81
###网关名称
spring:   ##网关服务名称
  application:
    name: service-zuul
  ###网关名称  
  cloud:
    config:
    ####读取后缀
      profile: dev
      ####读取config-server注册地址
      discovery:
        service-id: confi
    
### 配置网关反向代理    
zuul:
  routes:
    api-member:  ##随便写的
     ### 以 /api-member/访问转发到会员服务   通过别名找
      path: /api-member/**
      serviceId: app-toov5-member  ##别名  如果集群的话  默认整合了ribbon 实现轮训 负载均衡
    api-order:   ##随便写的
        ### 以 /api-order/访问转发到订单服务
      path: /api-order/**
      serviceId: app-toov5-order   ##别名

  

 

 与yml的对应!

 

启动 eureka  zuul member 然后访问

 

 

 

 获取接口文档

 

Nacos服务发现原理与Spring Cloud Alibaba集成实战 服务发现是微服务架构中实现动态寻址与流量调度的基础能力,其核心在于注册中心如何保障服务元数据的一致性、实时性与可治理性。Nacos凭借CP/AP可切换架构、Raft共识算法与丰富的服务元数据模型,超越传统AP型注册中心(如Eureka),支撑灰度发布、权重路由、故障隔离等高级治理场景。结合Spring Cloud Alibaba的深度封装,开发者可通过标准注解无缝接入gRPC推送、本地缓存、命名空间隔离等能力。本文围绕Nacos服务发现的通信协议(gRPC/Long-Polling)、数据同步机制(Raft 阅读详情

相关推荐

spring-Cloud-netflix-快速入门(二)-Zuul+Eureka-服务注册发现

在父pom的标签里添加如下依赖注意cloud的版本号和springboot版本号是有对应关系的如下所示。@SpringBootApplicationspringboot//启动注解。@EnableEurekaServer//开启注册服务注解。是Netflix基于JVM的路由器和服务器端负载均衡器。路由在微服务体系结构的一个组成部分。可以映射到您的Web应用程序,...

优快云博客专家、华为云享专家、Java领域新星创作者 1472

zuul+swagger2管理微服务接口--集群(9)

zuul+swagger2管理微服务接口--集群

ls_call520的专栏 91

书《微服务架构基础(Spring Boot+Spring Cloud+Docker)》-黑马程序员-学习笔记

书:《微服务架构基础(Spring Boot+Spring Cloud+Docker)》-黑马程序员的学习笔记

weixin_43873121的博客 1990

微服务项目网关集成swagger

本文场景为:使用SpringCloud框架,MyBatisPlus持久层框架;注册中心:nacos,配置中心:nacos;主要模块有:业务模块、网关模块、common模块(共享);网关路由从配置中心动态拉取;其他情况动态调整。配置完成后使用以下网址打开接口文档:网关服务ip:网关接口/doc.html。

qq_44541402的博客 1557

SpringBoot+Mybatis+redis-cluster+Swagger2

项目中SpringBoot整合Mybatis、redis-cluster集群、Swagger2接口说明

FCN---训练cityspaces

未经允许,不要随意转载! 最近想试试用FCN训练自己的数据集,想想标注是一件很费劲的事,于是就想到了用其他库里的数据,这里选用了cityspaces,默认已经配置好FCN. 1、下载cityspaces https://www.cityscapes-dataset.com/ 需要注册一个账号 cityspaces包含2...

wangyu088的专栏 2031

SpringCloud Gateway + Nacos 多模块下整合swagger2

SpringCloud Gateway + Nacos 多模块下整合swagger2

写代码的渣渣苏 5384

手把手教你用ES8311芯片搞定智能音箱TTS播放(附完整寄存器配置清单)

本文详细介绍了如何使用ES8311音频编解码芯片实现智能音箱TTS播放功能,包括芯片特性、硬件连接、寄存器配置及调试技巧。通过完整的寄存器配置清单和实战经验,帮助开发者快速掌握ES8311在智能音箱中的应用,优化音频输出质量和低功耗设计。

weixin_42567497的博客 558

swagger在微服务下的实战应用(微服务整合、token认证、规范化入参)

前言 6月19入的职到现在的7月27号,没错我已经实习了1个多月了,emmm怎么来说呢,拿我在学校敲代码的状态来比喻吧,如果把我在学校敲的代码比喻成一匹矫健驰骋在草原的黑马,那么我在公司敲的代码就更像是正规军,驰骋在赛场的汗血宝马了。 个人所感 以前在学校没怎么重视网络编程这块,即使以前有看过springCloud、duuble相关的视频,但是当时看视频的时候觉着这样开发项目太繁琐了,也没有坚持去系统化的去总结这一块的内容。以前我也刷到过牛客网上那些牛逼简历上写的项目是手写RPC框架、基于scoket开

风团团 3792

汽车软件工程师必看:ASPICE流程实战指南(附完整产物清单)

本文为汽车软件工程师提供ASPICE流程实战指南,详细解析如何搭建合规开发环境、各阶段文档产出清单及工具链整合策略。通过实战案例和模板资源,帮助团队高效实施ASPICE标准,提升软件开发质量与效率。

weixin_29230805的博客 470

从零构建:基于Docker与FRR的OSPF虚拟网络实验室

本文详细介绍了如何利用Docker与FRR构建OSPF虚拟网络实验室,从环境设计到高级网络拓扑配置,再到实验验证与排错。通过容器化技术实现高效资源利用和快速部署,特别适合网络协议教学、企业网络架构验证等场景。

plum99的博客 222

微服务技术-SpringCloud-Zuul网关集群&Swagger

Swagger2API接口管理 课题引入 随着微服务架构体系的发展和应用, 为了前后端能够更好的集成与对接,同时为了项目的方便交付,每个项目都需要提供相应的API文档。 来源:PC端、微信端、H5端、移动端(安卓和IOS端) 传统的API文档编写存在以下几个痛点: 对API文档进行更新的时候,需要通知前端开发人员,导致文档更新交流不及时; API接口返回信息不明确 大公司中肯定会有专门文档服务器对接口文档进行更新。 缺乏在线接口测试,通常需要使用相应的API测试工具,比如postman、

魔法革1996 218

ROS2入门到精通—— 1-1 Linux和ROS2基础

本文介绍了Linux的一般指令以及ROS2的常见理论和操作

BigDavid123的博客 3804

如何Spring Cloud Zuul作为网关的分布式系统中整合Swagger文档在同一个页面上

本文不涉及技术,只是单纯的一个小技巧。 阅读本文前,你需要对spring-cloud-zuul、spring-cloud-eureka、以及swagger的配置和使用有所了解。 如果你的系统也是用zuul作为分布式系统的网关,同时使用swagger生成文档,想把整个系统的文档整合在同一个页面上,可以参考本文。项目结构eureka-server:eureka服务注册中心,端口8080, zuu

qq6492178的博客 1万+

【图像处理】德里奇( Deriche)边缘检测器

Deriche边缘检测,同canny算法齐名,因此,知道canny原理,也有必要知道德里奇的检测原理。本篇专门针对德里奇算法展开讨论。

gongdiwudu的专栏 8683

Yocto开发讲解系列 - 总目录

Yocto开发讲解系列总纲Yocto开发专栏前言

fulinux的博客 3万+

springcloud gateway动态网关整合swagger

springcloud gateway动态网关整合swagger

weixin_42564514的博客 2751

【读论文】ASR大模型动态热词新方案

大型语言模型(LLMs)以其卓越的通用知识和推理能力重塑了 AI 领域,但它们在处理特定领域或用户的专有词汇(即“热词”)时,往往表现出“选择性失忆”。传统的 RAG 或 Prompting 方案在实时性和准确性上存在瓶颈。阿里的《Hotword Model for Large Models》论文提出了一种“神经插件”方案,它能够在不修改基座模型权重的前提下,动态、精准地将热词能力注入到生成过程中。本文将从架构设计、训练范式到推理逻辑,全方位拆解这一技术的内核,并探讨其在工业级应用中的价值。

kakaZhui的博客 292

spring-boot-cloud-zuul-eureka-swagger-demo项目案例

简介1、使用spring-boot进行项目构建,使用spring-cloud进行服务化,使用eureka作为服务注册中心,使用zuul最为网关,并集成了swagger-UI用于API管理。2、项目有6个工程,包含eureka服务,zuul服务,三个order服务构成的集群,payment服务。3、payment服务不通过网关调用order服务集群。4、eureka的注册中心管理地址:http://...

xuejian0616的专栏 1597

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

spring cloud系列gateway(熔断,限流,转发)

“有一天晚上,梦一场,你白发苍苍,说带我流浪,我还是没犹豫,就随你去天堂” 网关在微服务体系中有这非常的重要的地位,有了网关,外部直接与网关通信,我们不需要暴露太多微服务的信息,而且访问也方便 搭建 依赖 'org.springframework.cloud:spring-cloud-starter-gateway:2.1.1.RELEASE' 如果引用了web的依赖,需要删掉,sprin...

zlhmeng的博客 1750

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

FastDFS && Swagger

FastDFS 为什么使用FastDFS: 在分布式集群环境下,文件上传至节点A,这时通过负载均衡算法,访问到节点B,则不能访问到文件,这时 会出现有时能访问有时不能访问的问题 同时要考虑为文件做冗余备份、负载均衡、线性扩容等功能,这些都是单节点文件上传所不具备的 文章目录FastDFS一、FastDFS体系结构上传流程二、FastDFS安装2.文件上传微服务总结 一、FastDFS体系结构 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问 (

weixin_45753248的博客 247

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

4 Spring Cloud集群服务清单及搜索页面实现

在使用Spring Cloud的集群中,有时候想要看到集群中所提供的所有服务清单。但目前未找到较好的应用。Swagger能够提供每一个应用所提供的服务清单,但集群中所有的服务清单并没有集成起来。想要看哪个应用提供的服务清单需要到各个应用上去查看。而且它所提供的信息过多,很多时候都不需要使用到。 因此,在基于Actuator及Swagger基础上,开发了一个集成显示所有清单的页面,并提供简单的搜索...

icarusliu的专栏 1260

【ruoyi-cloud】SpringCloudAlibaba项目分析

为了展示更加友好的限流提示, Sentinel支持自定义异常处理。(1)方案一:yml配置# Spring spring : cloud : sentinel : scg : fallback : mode : response response-body : '{"code":403,"msg":"请求超过最大数,请稍后再试"}'(2)方案二:GatewayConfig注入Bean/*** 自定义限流异常处理。

weixin_44823875的博客 207
上一篇: Spring Cloud之Swagger2 API接口管理
下一篇: XXL-Job分布式任务调度
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值