点击上方蓝字"小黑在哪里"关注我吧

前言

上一篇【.Net Core微服务入门全纪录(八)——Docker Compose与容器网络】完成了docker-compose.yml文件的编写,最后使用docker compose的一个up指令即可在docker中运行整个复杂的环境。本篇简单介绍一下Ocelot与Swagger的集成,方便在网关项目中统一查看各个服务的api文档。

开始

首先,网关项目,服务项目 NuGet安装Swashbuckle.AspNetCore

服务项目

Order.API项目Startup:

public void ConfigureServices(IServiceCollection services)
{services.AddSwaggerGen(c =>{c.SwaggerDoc("v1", new OpenApiInfo { Title = "Order API", Version = "v1", Description = "# order service api..." });// Set the comments path for the Swagger JSON and UI.var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);c.IncludeXmlComments(xmlPath);c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme(){Description = "在下框中输入请求头中需要添加Jwt授权Token:Bearer Token",Name = "Authorization",In = ParameterLocation.Header,Type = SecuritySchemeType.ApiKey,BearerFormat = "JWT",Scheme = "Bearer"});c.AddSecurityRequirement(new OpenApiSecurityRequirement{{new OpenApiSecurityScheme{Reference = new OpenApiReference {Type = ReferenceType.SecurityScheme,Id = "Bearer"}},new string[] { }}});});services.AddControllers();......
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime lifetime, OrderContext orderContext)
{......app.UseSwagger();app.UseSwaggerUI(c =>{c.SwaggerEndpoint("/swagger/v1/swagger.json", "Order API V1");});app.UseRouting();......
}

打开项目文件Order.API.csproj,添加生成文档的配置,swagger要用到:

<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn);1591</NoWarn>

Product.API项目也是类似的修改,就不贴了。

网关项目

然后是Ocelot网关项目的Startup:

public void ConfigureServices(IServiceCollection services)
{services.AddSwaggerGen(c =>{c.SwaggerDoc("v1",new OpenApiInfo {Title = "Gateway API", Version = "v1", Description = "# gateway api..."});});services.AddControllers();......
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{app.UseSwagger();app.UseSwaggerUI(c =>{c.SwaggerEndpoint("/order/swagger/v1/swagger.json", "Order API V1");c.SwaggerEndpoint("/product/swagger/v1/swagger.json", "Product API V1");});//设置Ocelot中间件app.UseOcelot().Wait();
}

ocelot.json配置文件,Routes节点下增加2个路由配置,不做授权,限流,熔断等限制:

{"DownstreamPathTemplate": "/swagger/v1/swagger.json","DownstreamScheme": "http","UpstreamPathTemplate": "/product/swagger/v1/swagger.json","UpstreamHttpMethod": [ "Get" ],"ServiceName": "ProductService","LoadBalancerOptions": {"Type": "RoundRobin"}
},
{"DownstreamPathTemplate": "/swagger/v1/swagger.json","DownstreamScheme": "http","UpstreamPathTemplate": "/order/swagger/v1/swagger.json","UpstreamHttpMethod": [ "Get" ],"ServiceName": "OrderService","LoadBalancerOptions": {"Type": "RoundRobin"}
}

运行测试

使用docker-compose build:

build完成后启动:

浏览器访问网关项目:http://localhost:9070/swagger

接口测试:

此时因为没有授权所以返回401,为了方便获取token,我在IDS4.AuthCenter项目增加了一个客户端配置:

new Client
{ClientId = "postman client",ClientName = "Postman Client",AllowedGrantTypes = GrantTypes.ClientCredentials,ClientSecrets = { new Secret("postman client secret".Sha256()) },AllowedScopes = new [] {"orderApiScope", "productApiScope"},
}

使用postman获取token:

拿到token填入文本框,格式是Bearer xxxxxx,注意空格。这里的提示文字乱码了,应该是在docker中运行的原因,这个不影响先不管他。

填入token后再次请求接口,就可以正常返回了:

至此,Ocelot与Swagger的集成就完成了。本篇内容比较简单,swagger应该大部分人都用过。

最后

这个系列博客就到此结束了,本来也就是入门级别的。再往后可能就是更深入的服务治理,比如日志、监控、链路追踪等;服务的持续集成、持续部署;容器编排(k8s);服务网格(Service Mesh)等等。。。这些都不属于入门的范围了。

当然,不是每个公司都适合k8s,也不是每个项目都要做微服务。为了盲目推崇某个技术而去使用它时,它便失去了原本的价值。技术本不分高低,适合自己的就是最好的。感谢关注我的小伙伴们。。。

如果本文对您有用,

不妨点个“”或者转发朋友圈支持一下

.Net Core微服务入门全纪录(完结)——Ocelot与Swagger相关推荐

  1. .net core ocelot 获取路由的mothed_Net Core微服务入门全纪录(四)Ocelot网关(上)

    上一篇[.Net Core微服务入门全纪录(三)--Consul-服务注册与发现(下)]已经使用Consul完成了服务的注册与发现,实际中光有服务注册与发现往往是不够的,我们需要一个统一的入口来连接客 ...

  2. swagger 返回json字符串_Net Core微服务入门全纪录(完结)——Ocelot与Swagger

    前言 上一篇[.Net Core微服务入门全纪录(八)--Docker Compose与容器网络]完成了docker-compose.yml文件的编写,最后使用docker compose的一个up指 ...

  3. .Net Core微服务入门——Ocelot API网关接入(二)

    Net Core微服务入门--Ocelot API网关接入(二) 我们先接入Consul,实现服务发现 服务发现 1.引入 Ocelot.Provider.Consul 包 2.修改ocelot.js ...

  4. .Net Core微服务入门——Ocelot和Consul集群高可用

    .Net Core微服务入门--Ocelot和Consul集群高可用 上一章 我们ocelot网关顺利的接入了consul集群,并且访问成功. 但是,我们也遇到了问题,把 192.168.8.25 上 ...

  5. .Net Core微服务入门——Ocelot API网关接入(一)

    .Net Core微服务入门--Ocelot API网关接入 上一章我们测试了一个简单的Client 端访问Consul实现服务注册与发现,但是现实生产环境我们直接通过Client自行连接Consul ...

  6. .NET Core微服务之路:基于Ocelot的API网关实现--http/https协议篇

    前言 最近一直在忙公司和私下的兼职,白天十个小时,晚上四个小时,感觉每天都是打了鸡血似的,精神满满的,连自己那已经学打酱油的娃都很少关心,也有很长一段时间没有更新博客了,特别抱歉,小伙伴们都等得想取关 ...

  7. NET Core微服务之路:基于Ocelot的API网关实现--http/https协议篇

    前言 最近一直在忙公司和私下的兼职,白天十个小时,晚上四个小时,感觉每天都是打了鸡血似的,精神满满的,连自己那已经学打酱油的娃都很少关心,也有很长一段时间没有更新博客了,特别抱歉,小伙伴们都等得想取关 ...

  8. .net core微服务入门之Polly

    Polly极简介绍 Polly是一个被.NET基金会认可的弹性和瞬态故障处理库,允许我们以非常顺畅和线程安全的方式来执诸如行重试,断路,超时,故障恢复等策略,其主要功能如下: 重试(Retry) 断路 ...

  9. NET Core微服务之路:基于Ocelot的API网关Relay实现--RPC篇

    前言 我们都知道,API网关是工作在应用层上网关程序,为何要这样设计呢,而不是将网关程序直接工作在传输层.或者网络层等等更底层的环境呢?让我们先来简单的了解一下TCP/IP的五层模型. (图片出自ht ...

最新文章

  1. 据说只有程序员才看得懂 | 每日趣闻
  2. MFC之键盘和键盘消息处理
  3. 计算机网络实验四:利用UDP协议实现点对点聊天
  4. python建立ip代理池_Python搭建代理IP池实现存储IP的方法
  5. 胰腺癌代谢生物标志物最新研究成果:诊断效率明显优于传统标志物
  6. python规则引擎开发经验_关于物联网规则引擎技术,你想要知道的都在这儿!
  7. AD原理图编译ERROR:GND contains Output Pin and Power Pin objects
  8. 从实操教学到赛题演练,腾讯专家亲授TI-ONE平台操作攻略!
  9. 江苏大学21考研计算机技术上岸
  10. Datatable转换为Json
  11. 【CCCC】L3-007 天梯地图 (30分),两次Dijkstra+路径打印(数据点2,4错因),90行最短题解
  12. python做计量经济学的书籍_《计量经济学》教材书单
  13. Keras中文官方文档(离线版)
  14. 基于51单片机的智能温控风扇(程序+仿真+原理图)
  15. 月球 地球 三维位置_微软的月球飞行模拟器是一次了不起的未完成的地球之旅...
  16. 教你把竖屏视频剪辑为横屏播放的方法
  17. 2022-2028年全球与中国端点保护平台(EPP)行业市场深度调研及投资预测分析
  18. Rsync守护进程部署和实践
  19. 我们应该怎样看待经济危机
  20. 为什么外链建设对于谷歌SEO至关重要?

热门文章

  1. stm32串口通讯问题
  2. AIX 环境下遇到Device Busy问题
  3. 静态 非静态代码块和构造器的执行顺序测试方法
  4. R语言-异常数据处理2
  5. BDB (Berkeley DB)简要数据库(转载)
  6. Leetcode: Single Number
  7. DbVisualizer 8 解决中文乱码问题
  8. 移动应用ios和网页应用_如何在iOS上一次移动多个应用
  9. Object关于属性property的静态方法
  10. css3-13 如何改变文本框的轮廓颜色