Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章。

前言

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

最新文章

  1. 【代码笔记】iOS-验证手机号,邮箱,车牌号是否合法
  2. 屏幕监视专家 v1.0 定时录制屏幕动画发送到指定邮箱
  3. wpf学习笔记
  4. Smarty模本引擎
  5. 图表插件使用汇总(echarts,highchairts)
  6. 远程调试Java程序
  7. Security configuration of SSH login entry - enterprise security practice
  8. windbg符号
  9. Mac下的SVN客户端工具Cornerstone使用教程
  10. PHP 字符串函数--替换、正则匹配等
  11. nodejs 安装 postgresql module
  12. 【HDOJ】3496 Watch The Movie
  13. Oracle数据库12560及更改密码为永久
  14. 飘窗代码修改了一段js
  15. libevent入门(1)
  16. javase基础回顾(二)LinkedList需要注意的知识点 阅读源码收获
  17. 开涛spring3(6.8) - AOP 之 6.8 切面实例化模型
  18. 二、selenium 安装
  19. SpringBoot笔记十四:消息队列
  20. python, ImageFont

热门文章

  1. vue事件修饰符与按钮修饰符
  2. Python 为什么推荐蛇形命名法?
  3. Java二次复习笔记(1)
  4. docker已运行容器里的时区修改
  5. 手机商品分享样式(纯html+css)
  6. Springboot--元注解及自定义注解(表单验证)
  7. ES6躬行记 笔记
  8. Visual C++线程同步技术剖析:临界区,时间,信号量,互斥量
  9. python字符串与文本操作(一)
  10. Oracle查询表空间使用率很慢