首页 > 其他分享 >dotnet core微服务框架Jimu ~ 基础网关

dotnet core微服务框架Jimu ~ 基础网关

时间:2024-12-03 11:21:59浏览次数:11  
标签:core 网关 服务 Jimu Client using public

网关提供外部访问内部微服务的统一入口,基于分布式和服务治理等功能特点,外部不能绕过网关调用内部微服务(框架本身提供外部可以直接访问内部微服务的功能,这里不作详细说明),外部通过 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();
        }
    }
}

 

标签:core,网关,服务,Jimu,Client,using,public
From: https://www.cnblogs.com/flamesky/p/18583715

相关文章

  • blog.core MemoryCacheExtensions 为空处理
    usingSystem.Collections;usingSystem.Reflection;usingSystem.Reflection.Emit;usingMicrosoft.Extensions.Caching.Memory;namespaceBlog.Core.Common.Caches.Extensions;publicstaticclassMemoryCacheExtensions{#regionMicrosoft.Extensions.Cachin......
  • ASP.NET Core 9.0 中新增的MapStaticAssets() 中间件
    前言在Core9.0版本中新增的内容不算多,除了内置OpenAPI外应该就属MapStaticAssets中间件最有价值了,最初MapStaticAssets主要是为了解决Blazor静态资源加载缓慢而生的,当然只要是wwwroot下的任何静态资产都是可以使用TA平替UseStaticFiles的,因此在了解了TA的优势后建议升级......
  • 如何利用微型5G网关为智慧无人矿车提供精确定位
    随着5G、AI、物联网技术的发展和普及,越来越多行业正在加快生产、运营、管理的无人化、数字化与智能化,以适应当前我国“智慧、绿色、低碳”的新型发展模式需要。其中矿产业就是典型场景之一。针对矿山场景的智慧化、无人化转型,佰马提供基于微型5G网关的5G精确定位方案,实现矿车无人......
  • 摄像机实时接入分析平台视频分析网关机动车结构化识别算法:“智眼识车”的技术革新
    随着智能交通系统的发展,视频分析技术在机动车识别和监控中的应用越来越广泛。视频分析网关作为这一技术的核心组件,利用先进的算法对机动车进行结构化识别,以提升交通管理的效率和准确性。本文将探讨摄像机实时接入分析平台视频分析网关中机动车结构化识别算法的原理和应用。一、......
  • AI智能分析视频分析网关摄像头异常位移识别算法:保障视频监控系统有效性的关键技术
    随着智能监控技术的迅速发展,视频分析网关在各类场景中的应用变得愈加普及。尤其是在安全监控、城市管理、交通监控等领域,摄像头的正常工作状态至关重要。然而,摄像头因外部因素导致的异常位移问题常常被忽视,这会直接影响监控视频的有效性和监测的准确性。因此,开发一种有效的摄像头......
  • 面对api-ms-win-core-console-l1-2-0.dll丢失怎么处理?dll找不到的解决方法
    api-ms-win-core-console-l1-2-0.dll是Windows操作系统中的一个动态链接库文件,它属于Microsoft的WindowsAPI集的一部分。这个DLL文件主要负责提供与控制台相关的功能支持。当用户尝试运行某些应用程序时遇到此文件丢失或损坏的错误提示,通常会导致程序无法正常启动。......
  • 基于.NetCore开发博客项目 StarBlog - (32) 第一期完结
    前言本文记录一下StarBlog项目的当前状态与接下来v2版本的开发规划。StarBlog项目从2022年开始至今已经2年多了,本来早就该给第一期做个小结的,但这种博客类型的项目,一旦稳定能用之后,我就没多大的动力去更新了......
  • 电子电气架构 --- 车载网关GW连接外部IP Tester
    我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的豁达,往不幸上面喷“......
  • 修整程序集需要 .NET Core 3.0 或更高版本。
    最近编译WinSW,提示:修整程序集需要.NETCore3.0或更高版本。百思不得解,最后原来我不知道“修整程序”,在csproj文件中这么一段<ProjectSdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>Exe</OutputType><TargetFrameworks>net461;net6.0-windows</Tar......
  • .NET Core 异步(Async)底层原理浅谈58
    简介多线程与异步是两个完全不同的概念,常常有人混淆。异步异步适用于"IO密集型"的场景,它可以避免因为线程等待IO形成的线程饥饿,从而造成程序吞吐量的降低。其本质是:让线程的cpu片不再浪费在等待上,期间可以去干其它的事情。要注意的是:Async不能加速程序的执行,它只能做到不阻......