.NET 8 + Ocelot + Consul 实现代理网关、服务发现

.NET 8 + Ocelot + Consul 实现代理网关、服务发现

本文环境:.NET 8 + Ocelot 23.4.2 + Consul 1.7.14.6

1 实现网关

  1. 分别创建3个WebApi工程:OcelotGwTestGwAServiceTestGwBService
  2. OcelotGw工程中安装Ocelot包:Install-Package Ocelot
  3. 添加JSON配置文件或直接在appsettings.json文件中添加配置;
    1. 配置内容:
    {"Routes": [{"DownstreamPathTemplate": "/api/{url}","DownstreamScheme": "https","DownstreamHostAndPorts": [{"Host": "localhost","Port": 5001}],"UpstreamPathTemplate": "/A/{url}","UpstreamHttpMethod": [ "Get" ]},{"DownstreamPathTemplate": "/api/{url}","DownstreamScheme": "https","DownstreamHostAndPorts": [{"Host": "localhost","Port": 5002}],"UpstreamPathTemplate": "/B/{url}","UpstreamHttpMethod": [ "Get" ]},{"DownstreamPathTemplate": "/todos/{id}","DownstreamScheme": "https","DownstreamHostAndPorts": [{"Host": "jsonplaceholder.typicode.com","Port": 443}],"UpstreamPathTemplate": "/todos/{id}","UpstreamHttpMethod": [ "Get" ]}],"GlobalConfiguration": {"BaseUrl": "https://localhost:5000/"}
    }
    
  4. 在测试服务中分别添加HelloController
    [Route("api/[controller]")]
    [ApiController]
    public class HelloController : ControllerBase
    {[HttpGet]public IActionResult Get(){return Ok("Hello from Service A!");}
    }
    
  5. 同时启动三个工程,并访问https://localhost:5000/B/Hellohttps://localhost:5000/B/Hello测试。

2 服务发现

下面使用服务发现完成ServiceA的配置;

  1. 下载Consul:Install Consul
  2. 运行Consul,启动命令:consul.exe agent -dev
  3. 修改ServiceAOcelot配置:
    {"UseServiceDiscovery": true,"DownstreamPathTemplate": "/api/{url}","DownstreamScheme": "http","ServiceName": "ServiceA","UpstreamPathTemplate": "/A/{url}","UpstreamHttpMethod": [ "Get" ]
    }
    
  4. ServiceA中添加健康监测接口:
    using Microsoft.AspNetCore.Mvc;
    namespace Hearth.TestGwAService.Controllers
    {[Route("[controller]/[action]")][ApiController]public class HealthController : ControllerBase{[HttpGet("/healthCheck")]public IActionResult Check() => Ok("ok");}
    }
    
  5. ServiceAProgram中进行代理服务注册:
    var consulClient = new ConsulClient(x =>
    {// consul 服务地址x.Address = new Uri("http://localhost:8500");
    });
    var registration = new AgentServiceRegistration()
    {ID = Guid.NewGuid().ToString(),Name = "ServiceA",// 服务名Address = "localhost", // 服务绑定IPPort = 5001, // 服务绑定端口Check = new AgentServiceCheck(){DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服务启动多久后注册Interval = TimeSpan.FromSeconds(10),//健康检查时间间隔HTTP = "http://localhost:5001/healthCheck",//健康检查地址Timeout = TimeSpan.FromSeconds(5)}
    };
    // 服务注册
    consulClient.Agent.ServiceRegister(registration).Wait();
    var app = builder.Build();
    // 应用程序终止时,服务取消注册
    app.Lifetime.ApplicationStopping.Register(() =>
    {consulClient.Agent.ServiceDeregister(registration.ID).Wait();
    });
    

3 一些问题

  1. Ocelot配置文件中,旧版本可能用的是ReRoutes,新版本中应该是Routes
  2. 注意DownstreamScheme,如果使用ssl应为https
  3. 在开发环境使用Consul服务发现时,需要注意是否使用SSL验证,无效的证书会导致502 Bad Gateway;
  4. 官方文档:ocelot.readthedocs.io

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

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

相关文章

Agent系列:AppAgent v2-屏幕智能Agent(详解版)

引言 简介 方法 Agent 框架 Agent 交互 探索阶段 部署阶段 文档生成 高级功能 实验结果 总结 局限性 未来工作 1. 引言 大语言模型(LLM)如 ChatGPT 和 GPT-4 显著提升了自然语言处理能力,并且推动了智能体在自主决策中的应用。…

flink cdc oceanbase

接上文:一文说清flink从编码到部署上线 环境:①操作系统:阿里龙蜥 7.9(平替CentOS7.9);②CPU:x86;③用户:root。 预研初衷:现在很多项目有国产化的要求&#…

Docker 安装与配置 Nginx

摘要 1、本文全面介绍了如何在 Docker 环境中安装和配置 Nginx 容器。 2、文中详细解释了如何设置 HTTPS 安全连接及配置 Nginx 以实现前后端分离的代理服务。 2、同时,探讨了通过 IP 和域名两种方式访问 Nginx 服务的具体配置方法 3、此外,文章还涵…

C语言格式输出

1.转换字符说明: 2.常用的打印格式: 在 C 语言中,格式输出主要依靠 printf 函数来实现。以下是一些 C 语言格式输出的代码举例及相关说明。 printf("%2d",123),因为输出的部分有三位数,但是要求…

yolov5核查数据标注漏报和误报

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、误报二、漏报三、源码总结 前言 本文主要用于记录数据标注和模型预测之间的漏报和误报思想及其源码 提示:以下是本篇文章正文内容,…

Word如何插入图片并移动到某个位置

Word如何插入图片并移动到某一个位置 新建word→插入→图片 选择合适的位置→选择图片→打开 点击图片→布局选项→选择文字环绕下的任意一个→固定在页面上 点击图片就可以将图片移动到任意位置

【prometheus】【blackbox_exporter】grafna导入blackbox_exporter看板配置

1、进入到grafana看板,选择合适的看板模版 地址:https://grafana.com/grafana/dashboards/ 在搜索框中输入 blackbox_exporter,找到合适的模版,如下图所示: 2、点击并下载对应看板JSON数据 3、在grafana的页面进行导入操作 3.1…

微服务面试题:分布式事务和服务监控

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

wx015基于springboot+vue+uniapp的经济新闻资讯的设计与实现

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…

获取用户详细信息-ThreadLocal优化

Thread全局接口可用,不用再重复编写。所以为了代码的复用,使用Thread。把之前的内容(函数的参数和map与username)注释掉,换为Thread传过来的内容(map与username)。 因为Thread需要在拦截器里面…

【论文阅读笔记】IceNet算法与代码 | 低照度图像增强 | IEEE | 2021.12.25

目录 1 导言 2 相关工作 A 传统方法 B 基于CNN的方法 C 交互方式 3 算法 A 交互对比度增强 1)Gamma estimation 2)颜色恢复 3)个性化初始η B 损失函数 1)交互式亮度控制损失 2)熵损失 3)平滑损失 4)总损失 C 实现细节 4 实验 5 IceNet环境配置和运行 1 下载…

git环境配置用户与秘钥

git环境配置用户与秘钥 git环境配置git配置用户名与邮箱git配置秘钥 git环境配置 已经安装git后环境配置 git配置用户名与邮箱 查看git版本 git -v查看git配置环境 git config --global --list第一次未配置时会报无法找到配置文件 全局配置git用户名 git config --glob…

logback日志框架源码分析

目录 (一)入口:slf4j选择日志框架 (二)日志框架初始化 (1)logback的3种配置方式 a、BasicConfigurator默认配置 b、SPI方式配置的Configurator实现类 c、通过配置文件初始化 (2)xml配置文件初始化 (三)Logger的创建 (四)打印日志 本文源码基于:logback版…

SpringBoot整合篇 05、Springboot整合Redission

文章目录 前言Redission详细配置步骤pom依赖application.yaml配置类CacheConfigEnvironmentContext RedissionController单测 前言 本篇博客是SpringBoot整合Redission,若文章中出现相关问题,请指出! 所有博客文件目录索引:博客…

从0入门自主空中机器人-4-【PX4与Gazebo入门】

前言: 从上一篇的文章 从0入门自主空中机器人-3-【环境与常用软件安装】 | MGodmonkeyの世界 中我们的机载电脑已经安装了系统和常用的软件,这一篇文章中我们入门一下无人机常用的开源飞控PX4,以及ROS中无人机的仿真 1. PX4的安装 1.1 PX4固件代码的下载…

支持最新 mysql9的workbench8.0.39 中文汉化教程来了

之前在 B 站上发布了 mysql8 workbench 汉化教程,一年多来帮助很多初学者解决了不熟悉英文的烦恼。 汉化视频可以访问: 2024最新版mysql8.0.39中文版mysql workbench汉化 中文升级 旧版汉化报错解决_哔哩哔哩_bilibili MySql Workbench汉化_哔哩哔哩_…

RC充电电路仿真与分析

RC充电原理 下图是一个常见的RC充电电路:(假设R10K,C100nF) SW断开时,这个电路处于断路状态,C既没有充电也没有放电;SW闭合时,直流电源5V为电容C充电; 充电时电容两端…

(二)编译原生SDK以及配置交叉编译链

文章目录 编译原生SDKLinuxSDK的安装第一步解压LinuxSDK第二步安装依赖软件第三步解压Buildroot的dl文件 Linux系统镜像编译、生成第一步 配置编译环境第二步 编译 LinuxSDK编译上面配置好的 环境配置编译 LinuxSDK配置内核选项配置 Buildroot编译 Qt 库 编译生成 Linux 系统镜…

分布式算法(五):初识ZAB协议

文章目录 一、什么是Zookeeper二、ZAB与Zookeeper的关系为什么Zookeeper不直接使用Paxos 三、ZAB简介1.名词解释提案(Proposal)事务(Transaction)原子广播(Atomic Broadcast) 2.集群角色领导者(…

RabbitMQ基础篇之Java客户端 Topic交换机

文章目录 Topic 交换机概述 Routing Key 与 Binding Key优缺点及场景优点缺点应用场景 案例演示创建队列和交换机:消费者代码:消息发送代码:测试: 总结 Topic 交换机概述 路由机制: Topic交换机与Direct交换机类似&am…