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

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

前言

上一篇【.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,也不是每个项目都要做微服务。为了盲目推崇某个技术而去使用它时,它便失去了原本的价值。技术本不分高低,适合自己的就是最好的。感谢关注我的小伙伴们。。。


如果本文对您有用,

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308687.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Swagger2]Swaggr配置扫描接口配置Swagger开关

Swagger配置扫描接口 1、构建Docket时通过select()方法配置怎么扫描接口。 Bean public Docket docket() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()// 通过.select()方法&#xff0c;去配置扫描接口,RequestHandlerSelectors配置如何扫描…

最全.Net学习资料库上线,今日可免费下载各类资源!(附百度云链接)

送资料送资料1 适合学习者&#xff1a;0-10年.Net开发人员2 更新时间&#xff1a;2020年7月24日3 在哪领取&#xff1a;文末扫码免费领取4 包含课程&#xff1a;零基础就业必修/高级开发必修/架构师必修5 配套资料&#xff1a;视频配套源码/最新面试题合集/最新技术书/安装包你…

[Swagger2]拓展:其他皮肤

拓展&#xff1a;其他皮肤 我们可以导入不同的包实现不同的皮肤定义&#xff1a; 1、默认的 访问 http://localhost:8080/swagger-ui.html <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><ve…

如何基于 DDD 构建微服务?

本文将讨论微服务与 DDD 涉及到的概念、策划和设计方法&#xff0c;并且尝试将一个单体应用拆分成多个基于 DDD 的微服务。微服务的定义微服务中的“微”虽然表示服务的规模&#xff0c;但它并不是使应用程序成为微服务的唯一标准。当团队转向基于微服务的架构时&#xff0c;他…

.NET Core ResponseCache【缓存篇(一)】

一、前言源码1、最近一直在看项目性能优化方式&#xff0c;俗话说的好项目优化第一步那当然是添加缓存&#xff0c;我们的项目之所以卡的和鬼一样&#xff0c;要么就是你的代码循环查询数据库&#xff08;这个之前在我们的项目中经常出现&#xff0c;现在慢慢在修正&#xff09…

[Swagger2]分组和接口注释及小结

分组和接口注释及小结 配置API分组 1、如果没有配置分组&#xff0c;默认是default。通过groupName()方法即可配置分组&#xff1a; Bean public Docket docket(Environment environment) {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).groupName(&qu…

Asp.Net Core 中的“虚拟目录”

写在前面现在部署Asp.Net Core应用已经不再限制于Windows的IIS上&#xff0c;更多的是Docker容器、各种反向代理来部署。也有少部分用IIS部署的&#xff0c;IIS部署确实是又快又简单&#xff0c;图形化操作三下五除二就可以发布好一个系统了。在过去Asp.Net MVC 项目部署的时候…

[mybatis]缓存_缓存有关的设置以及属性

缓存有关的设置以及属性 全局配置中的设置 和缓存有关的设置/属性1.cacheEnabletrue&#xff1b;false&#xff1b;关闭缓存(二级缓存关闭)(一级缓存一直可用的)2.每个select标签都有useCache“true”&#xff1b; false&#xff1b;不使用缓存(一级缓存依然使用&#xff0c;二…

EF批量插入太慢?那是你的姿势不对

大概所有的程序员应该都接触过批量插入的场景&#xff0c;我也相信任何的程序员都能写出可正常运行的批量插入的代码。但怎样实现一个高效、快速插入的批量插入功能呢&#xff1f;由于每个人的工作履历&#xff0c;工作年限的不同&#xff0c;在实现这样的一个需求时&#xff0…

[RabbitMQ]什么是MQ

什么是MQ MQ(message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&#xff0c;只不过队列中存放的内容是message 而已&#xff0c;还是一种跨进程的通信机制&#xff0c;用于上下游传递消息。在互联网架构中&#xff0c;MQ 是一种非常…

.NET Core 实现基于Websocket的在线聊天室

什么是Websocket我们在传统的客户端程序要实现实时双工通讯第一想到的技术就是socket通讯&#xff0c;但是在web体系是用不了socket通讯技术的&#xff0c;因为http被设计成无状态&#xff0c;每次跟服务器通讯完成后就会断开连接。在没有websocket之前web系统如果要做双工通讯…

用 Natasha 写个类型调用的架子

一、想法自上篇文章&#xff0c;我一直琢磨整个好点的例子来展示 Natasha 动态编程能力, 于是就写了一个简单的类型调用的架子&#xff0c;耗时40分钟左右, 项目地址&#xff1a;https://github.com/NMSAzulX/TypeCaller二、功能特点a)、简单的注入功能支持无参构造注入支持递…

Natasha v4.0.0.0 动态编程新篇章

一、简介Natasha 基于 Roslyn 的 C# 动态程序集构建库&#xff0c;该库允许开发者在运行时使用 C# 代码构建域 / 程序集 / 类 / 结构体 / 枚举 / 接口 / 方法等&#xff0c;使得程序在运行的时候可以增加新的模块及功能。Natasha 集成了域管理/插件管理&#xff0c;可以实现域隔…

[RabbitMQ]RabbitMQ概念_四大核心概念

RabbitMQ RabbitMQ 的概念 RabbitMQ 是一个消息中间件&#xff1a;它接受并转发消息。你可以把它当做一个快递站点&#xff0c;当你要发送一个包裹时&#xff0c;你把你的包裹放到快递站&#xff0c;快递员最终会把你的快递送到收件人那里&#xff0c;按照这种逻辑 RabbitMQ …

.Net Core in Docker极简入门(下篇)

点击上方蓝字"小黑在哪里"关注我吧Docker-Compose代码修改yml fileup & down镜像仓库前言上一篇【.Net Core in Docker极简入门&#xff08;上篇&#xff09;】讲解了docker的一些基本命令和操作&#xff0c;并成功构建了自己的asp.net core web应用的镜像&#…

这么多Apache顶级项目,SkyWalking为何一枝独秀?

吴晟读完需要5分钟速读仅需 2 分钟吴晟Apache基金会会员&#xff0c;Apache SkyWalking创始人、项目VP和PMC成员&#xff0c;Apache孵化器PMC成员&#xff0c;Apache ShardingSphere PMC成员&#xff0c;Apache APISIX (incubating) PPMC成员&#xff0c;Apache ECharts (incub…

[RabbitMQ]工作原理_原理名词解释

RabbitMQ 核心部分 各个名词介绍 RabbitMQ工作原理 Broker&#xff1a; 接收和分发消息的应用&#xff0c;RabbitMQ Server 就是 Message Broker Virtual host&#xff1a; 出于多租户和安全因素设计的&#xff0c;把 AMQP 的基本组件划分到一个虚拟的分组中&#xff0c;类…

Istio 中的授权策略详解

本文节选自 ServiceMesher 社区出品的开源电子书《Istio Handbook——Istio 服务网格进阶实践》&#xff0c;阅读地址&#xff1a;https://www.servicemesher.com/istio-handbook/授权功能是 Istio 中安全体系的一个重要组成部分&#xff0c;它用来实现访问控制的功能&#xff…

[RabbitMQ]创建Java开发环境_消费者_生产者

我们将用 Java 编写两个程序。发送单个消息的生产者和接收消息并打印出来的消费者。我们将介绍 Java API 中的一些细节。 在下图中&#xff0c;“ P”是我们的生产者&#xff0c;“ C”是我们的消费者。中间的框是一个队列-RabbitMQ 代表使用者保留的消息缓冲区 引入依赖 <…

如何利用Gitlab-CI持续部署到远程机器?

长话短说&#xff0c;今天聊一聊使用Gitlab-CI 自动部署到远程服务器。如果看过《基于docker-compose的Gitlab CI/CD实践&排坑指南》这篇文章的朋友&#xff0c;会注意到我是在 Gitlab-Runner服务器上自动部署的站点&#xff0c;本次我们结合ssh部署到远程机器(将CI服务器和…