dotnet core微服务框架Jimu ~ 基础网关
网关提供外部访问内部微服务的统一入口,基于分布式和服务治理等功能特点,外部不能绕过网关调用内部微服务(框架本身提供外部可以直接访问内部微服务的功能,这里不作详细说明),外部通过 http 协议请求网关暴露的接口,网关再用基于 TCP/IP 协议的 RPC 方式调用内部被发现的微服务。
1 创建网关
创建一个基于 .Net Core 6.0 的 Asp.Net Core Web (项目模版选 WebApi)的项目,命名为 ApiGateway
1.1 添加 Jimu.Client 引用
网关相对于微服务而言属于客户端,所以引用 Jimu.Client,因为需要支持 Consul, 所以还要因为 Jimu 对 consul 的扩展库 Jimu.Common.Discovery.ConsulIntegration
Install-Package Jimu.Client
Install-Package Jimu.Common.Discovery.ConsulIntegration
1.2 然后在 Startup 里添加 Jimu 的启动代码
using System.Linq;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.IdentityModel.Tokens;
using Autofac;
using Jimu;
using Jimu.Client;
using Jimu.Client.ApiGateway; namespace ApiGateway
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
} public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(); // 支持跨域
services.UseJimu(); // 支持 Jimu
} // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{ app.UseStaticFiles();
app.UseAuthentication();
app.UseStatusCodePages(); // jimu client, 启动 jimu
var host = new ServiceHostClientBuilder(new ContainerBuilder())
.UseLog4netLogger(new LogOptions
{
EnableConsoleLog = true, // 启用控制台日志
EnableFileLog = true, // 启用文件日志
FileLogLevel = LogLevel.Info | LogLevel.Error, // 文件日志只记录 Info 和 Error
})
.UseConsulForDiscovery("127.0.0.1", 8500, "JimuService") // 配置 consul
.UseDotNettyForTransfer() // 使用 dotnetty 做 RPC 的通信库
.UseHttpForTransfer() // 同时支持使用 http 作为 RPC 的通信库
.UsePollingAddressSelector() // 使用轮询算法实现负载均衡
.UseServerHealthCheck(1) // 服务健康监控,时间间隔为 1 分钟
.SetRemoteCallerRetryTimes(3) // 调用微服务失败重试次数,设为 3次
.SetDiscoveryAutoUpdateJobInterval(1) // 服务发现,时间间隔 1 分钟
.UseToken(() => { var headers = JimuHttpContext.Current.Request.Headers["Authorization"]; return headers.Any() ? headers[0] : null; }) // 获取请求所携带的 token
.Build();
app.UseJimu(host); // 使用 jimu
host.Run(); // 启动 jimu
}
}
}
最基本的网关完成了,已经支持接收请求。 下面要加入一些可视化的服务治理,如微服务器列表,服务器健康状态,服务列表
1.3 服务治理
服务治理还未完善,只简单做了服务器列表和健康状态,以及开放的服务列表。
创建 2 个控制器:
1.3.1 Server 展示服务器列表
using Autofac;
using Jimu;
using Jimu.Client;
using Jimu.Client.ApiGateway;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Threading.Tasks; namespace ApiGateway.Controllers
{
public class ServerController : Controller
{
public IActionResult Index()
{
return View();
}
//[HttpGet(Name ="addresses")]
// 获取服务器列表
public async Task<List<JimuAddress>> GetAddresses()
{
var serviceDiscovery = JimuClient.Host.Container.Resolve<IClientServiceDiscovery>();
var addresses = await serviceDiscovery.GetAddressAsync();
return addresses; } }
}
注意:控制器和方法上面都不需添加任何属性
1.3.2 Services 展示服务列表
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Autofac;
using Jimu;
using Jimu.Client;
using Jimu.Client.ApiGateway;
using Microsoft.AspNetCore.Mvc; namespace ApiGateway.Controllers
{
//[Produces("application/json")]
public class ServicesController : Controller
{
public IActionResult Index()
{
return View();
}
//[HttpGet(Name ="services")]
// 获取服务列表
public async Task<List<JimuServiceDesc>> GetServices(string server)
{
var serviceDiscovery = JimuClient.Host.Container.Resolve<IClientServiceDiscovery>();
var routes = await serviceDiscovery.GetRoutesAsync();
if (routes != null && routes.Any() && !string.IsNullOrEmpty(server))
{
return (from route in routes
where route.Address.Any(x => x.Code == server)
select route.ServiceDescriptor).ToList();
}
return (from route in routes select route.ServiceDescriptor).ToList();
}
}
}
dotnet core微服务框架Jimu ~ 基础网关的更多相关文章
- 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)
一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...
- hello world .net core 微服务框架 Viper
1.Viper是什么? Viper 是.NET平台下的Anno微服务框架的一个示例项目.入门简单.安全.稳定.高可用.全平台可监控.底层通讯可以随意切换thrift grpc. 自带服务发现.调用链追 ...
- 基于.NET CORE微服务框架 -谈谈surging API网关
1.前言 对于最近surging更新的API 网关大家也有所关注,也收到了不少反馈提出是否能介绍下Api网关,那么我们将在此篇文章中剥析下surging的Api 网关 开源地址:https://git ...
- 基于.NET CORE微服务框架 -浅析如何使用surging
1.前言 surging受到大家这么强烈的关注,我感到非常意外,比如有同僚在公司的分享会上分享surging, 还有在博客拿其它的RPC框架,微服务做对比等等,这些举动都让我感觉压力很大,毕竟作为个人 ...
- net core 微服务框架 Viper 调用链路追踪
1.Viper是什么? Viper 是.NET平台下的Anno微服务框架的一个示例项目.入门简单.安全.稳定.高可用.全平台可监控.底层通讯可以随意切换thrift grpc. 自带服务发现.调用链追 ...
- .Net Core 微服务容器系列基础目录篇
1.开场白 HI,各位老铁,大家端午好,之前写了些关于.net core商城系列的文章,有点乱,今天心血来潮想着整理一下(今天只是先把目录列出来,后面的每篇文章这两天会进行重新修改的,目前先将就看下) ...
- 基于.NET CORE微服务框架 -谈谈surging的服务容错降级
一.前言 对于不久开源的surging受到不少.net同学的青睐,也受到.net core学习小组的关注,邀请加入.NET China Foundation以方便国内.net core开源项目的推广, ...
- dotnet core 微服务教程
这个教程主要是对于第一次使用dotnet core开发的同学. 运行环境是在centos 7 , 使用了docker容器. 即这是一篇运行在linux的docker容器上的微服务的简单应用. 一. 安 ...
- .net Core 微服务框架 surging 使用
surging 是一个分布式微服务框架,提供高性能RPC远程服务调用,采用Zookeeper.Consul作为surging服务的注册中心, 集成了哈希,随机,轮询作为负载均衡的算法,RPC集成采用的 ...
- 基于.NET CORE微服务框架 -Api网关服务管理
1.前言 经过10多天的努力,surging 网关已经有了大致的雏形,后面还会持续更新完善,请大家持续关注研发的动态 最近也更新了surging新的版本 更新内容: 1. 扩展Zookeeper封装2 ...
随机推荐
- 工具 – Cypress
介绍 Cypress 是一款 e2e 测试工具.每当我们写好一个组件或者一个页面之后,我们会想对整体做一个测试. 在不使用工具的情况下,我们会开启 browser,然后做一系列点击.滚动.填 form ...
- Soring —— 容器总结
获取bean 容器层次结构图 *BeanFactory 是IoC容器的顶层接口,初始化BeanFactory对象时,加载的bean延迟加载 bean相关 依赖注入相关
- 邀请参与 2022 第三季度 Flutter 开发者调查
自 Flutter 3 发布之后,我们在以移动端为中心到多平台框架的路线上稳步前行,用 Dart 2.17 的新语言特性帮助大家提升工作效率,并对核心工具进行了改进,让您在跨平台打造优秀体验时更加得心 ...
- window10任务栏图标不见了(如何修复)
1.按 Windows键+ R 2.写 %temp% 在其中,然后单击"确定". 3.删除其中的所有内容以清除临时文件. 4.重启
- Java日期时间API系列32-----Jdk8中java.time包中的新的日期时间API类应用,时间工具包 xk-time 1.0.0 版本完成。
从Java日期时间API系列第一篇博客开始,利用业余时间对Java日期时间API源码进行了系统的.多次的阅读实践,包括Date.LocalDate.LocalDateTime.LocalTime.In ...
- 03 Transformer 中的多头注意力(Multi-Head Attention)Pytorch代码实现
3:20 来个赞 24:43 弹幕,是否懂了 QKV 相乘(QKV 同源),QK 相乘得到相似度A,AV 相乘得到注意力值 Z 第一步实现一个自注意力机制 自注意力计算 def self_attent ...
- k8s的pod的理解
pod共享相同的IP地址和端口空间. 这意味着在同一 pod中的容器运行的 多个进程需要注意不能绑定到相同的端口号, 否则会导致端口冲突, 但这只涉及同一pod中的容器. 由于每个pod都有独立的端口 ...
- Tarjan缩点题单 刷题题解
Tarjan缩点可以将一个图的每个强连通分量缩成一个点,然后构建新图,该图就会变成一个有向无环图.变成有向无环图之后就能结合最短路,拓扑......解决相应题目 洛谷题单分享: https://www ...
- 分享一个大模型在请求api接口上的巧用
前言 自从Chatgpt横空出世以来,各种智能工具层出不穷,聊天.绘画.视频等各种工具帮助很多人高效的工作.作为一个开发者,目前常用应用包括代码自动填充,聊天助手等. 这些是工具层面的使用,有没有将大 ...
- numpy的一些基本操作
文章目录 1.numpy数组的多种创建方式 1.1使用np.array()创建 1.2使用plt创建 1.3使用np的routine函数创建 2.numpy的常用属性 2.1shape 2.2ndim ...