当前位置: 首页 > news >正文

Ocelot\Consul\.NetCore的微服务应用案例

案例资料链接:https://download.csdn.net/download/ly1h1/90733765

1.效果

实现两个微服务ServerAPI1和ServerAPI2的负载均衡以及高可用。具体原理,看以下示意图。

2.部署条件

 1、腾讯云的轻量化服务器

 2、WindowServer2016 

 3、.NETCore7.0

 4、Negut 包:Consul1.7.14.7、Ocelot16.0.1、Ocelot.Provider.Conusl16.0.1

 5、.NET捆绑托管 dotnet-hosting-9.0.4-win.exe

3.开放端口

 2.1 云服务安全组端口开放

  端口:5000,是服务1

  端口:5001,是服务2

  端口:5010,是Ocelot网关

  端口:8050/8030/8031/8032,是Consul的端口

  • 8500 是核心 API 端口,必知;

  • 8030/31/32 需结合具体配置,可能是用户自定义的服务或工具端口。

2.2 服务器配置入栈站规则

3.Consul配置(部署可参考链接Consul安装部署(Windows环境)-CSDN博客)

{"datacenter": "dc1","data_dir": "C:\\consul\\data","node_name": "node-10-4-0-7","bind_addr": "0.0.0.0","advertise_addr": "10.0.4.7",(云服务内网的IP)"client_addr": "0.0.0.0","ports": {"http": 8500,"dns": 8600,"grpc": -1},"ui_config": {"enabled": true},"server": true,"bootstrap": true,"log_level": "ERROR","disable_update_check": true,"performance": {"raft_multiplier": 3,"leave_drain_time": "5s"}
}

4.Ocelot代码

4.1 Progrm.CS

using Ocelot.DependencyInjection;
using Ocelot.Middleware;
using Ocelot.Provider.Consul; // 引入 Consul 支持var builder = WebApplication.CreateBuilder(args);// 1. 配置 Kestrel 只监听 5010 端口(不绑定特定 IP)
builder.WebHost.UseUrls("http://*:5010"); // 监听所有网络接口
// 或者用 ConfigureKestrel(更灵活):
// builder.WebHost.ConfigureKestrel(serverOptions => serverOptions.ListenAnyIP(5010));// 2. 加载 Ocelot 配置
builder.Configuration.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);// 3. 添加 Ocelot 和 Consul 支持
builder.Services.AddOcelot(builder.Configuration).AddConsul(); // 关键:注入 Consul 提供程序var app = builder.Build();// 4. 使用 Ocelot 中间件
await app.UseOcelot();
app.Run();

4.2 Ocelot.JSON

{"Routes": [{"DownstreamPathTemplate": "/api/values/{action}","UpstreamPathTemplate": "/api/values/{action}","ServiceName": "ServerAPI","LoadBalancerOptions": {"Type": "RoundRobin"},"ServiceDiscoveryProvider": {"Type": "Consul","Host": "43.162.118.209","Port": 8500,"PollingInterval": 2000, // 每2秒从Consul拉取最新健康实例"SkipItemsWithUnhealthyStatus": true}}]
}

5.服务1代码

5.1 Program.CS

using Consul;
using Microsoft.OpenApi.Models;var builder = WebApplication.CreateBuilder(args);// 添加控制器和Swagger
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{c.SwaggerDoc("v1", new OpenApiInfo { Title = "ServerAPI1", Version = "v1" });
});// 注册Consul客户端
builder.Services.AddSingleton<IConsulClient>(new ConsulClient(c =>
{c.Address = new Uri("http://192.168.0.102:8500");
}));// 配置Kestrel(可选,根据实际需求)
builder.WebHost.UseUrls("http://*:5000");var app = builder.Build();// 健康检查端点
//app.MapGet("/health", () => Results.Ok("Healthy"));// 健康检查端点(模拟5000端口故障)
//app.MapGet("/health", (HttpContext context) =>
//{
//    var port = context.Request.Host.Port;
//    return port == 5000 ? Results.StatusCode(503) : Results.Ok("Healthy (Port: " + port + ")");
//});
//app.MapGet("/health", () => Results.Ok("Healthy (Port: 5000)"));
app.MapGet("/health", () =>
{// 基础存活检查(不依赖任何业务逻辑)return Results.Ok("Alive");
});// 注册到Consul
var consulClient = app.Services.GetRequiredService<IConsulClient>();
var registration = new AgentServiceRegistration
{ID = "ServerAPI-5000",Name = "ServerAPI",Address = "192.168.0.102",Port = 5000,Check = new AgentServiceCheck{HTTP = "http://192.168.0.102:5000/health",Interval = TimeSpan.FromSeconds(3),  // 每3秒检查一次Timeout = TimeSpan.FromSeconds(1),  // 1秒无响应视为失败DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(10) // 10秒后自动移除}
};
consulClient.Agent.ServiceRegister(registration).Wait();// 其他中间件
app.UseRouting();
app.MapControllers();// 配置Swagger(开发环境)
if (app.Environment.IsDevelopment())
{app.UseSwagger();app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "ServerAPI1 v1"));
}// 路由和控制器
app.UseRouting();
app.MapControllers();// 应用停止时注销服务
app.Lifetime.ApplicationStopping.Register(() =>
{consulClient.Agent.ServiceDeregister(registration.ID).Wait();
});app.Run();

5.2 接口

    using Microsoft.AspNetCore.Mvc;using ServerAPI1.Models;namespace ServerAPI1.Controllers{[ApiController][Route("api/[controller]")][Produces("application/json")]public class ValuesController : ControllerBase{/// <summary>/// 获取服务基本信息/// </summary>[HttpGet("info")][ProducesResponseType(200)]public IActionResult GetInfo(){return Ok(new { Service = "ServerAPI1", Port = 5000 });}/// <summary>/// 计算服务 (A+B)/// </summary>/// <param name="model">输入参数</param>[HttpPost("calculate")][ProducesResponseType(200)][ProducesResponseType(400)]public IActionResult Calculate([FromBody] TestModel model){if (!ModelState.IsValid) return BadRequest(ModelState);return Ok(new { Result = 123 + 321, Input = model });}[HttpGet("getail")] // 实现 /api/values/getailpublic IActionResult Get(){return Ok("This is /api/values/getail from ServerAPI1");}[HttpGet("setail")]public IActionResult Gett(){return Ok("This is /api/values/setail from " + GetType().Assembly.GetName().Name);}}}

5.3 数据模型

using System.ComponentModel.DataAnnotations;namespace ServerAPI1.Models
{public class TestModel{[Required][StringLength(100)]public string AAA { get; set; }[StringLength(200)]public string BBB { get; set; }}
}

6.服务2代码

6.1 Program.CS

using Consul;
using Microsoft.OpenApi.Models;var builder = WebApplication.CreateBuilder(args);// 添加控制器和Swagger
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{c.SwaggerDoc("v1", new OpenApiInfo { Title = "ServerAPI2", Version = "v1" });
});// 注册Consul客户端
builder.Services.AddSingleton<IConsulClient>(new ConsulClient(c =>
{c.Address = new Uri("http://192.168.0.102:8500");
}));// 配置Kestrel(可选,根据实际需求)
builder.WebHost.UseUrls("http://*:5001");var app = builder.Build();// 健康检查端点
//app.MapGet("/health", () => Results.Ok("Healthy"));// 健康检查端点(模拟5000端口故障)
//app.MapGet("/health", (HttpContext context) =>
//{
//    var port = context.Request.Host.Port;
//    return port == 5000 ? Results.StatusCode(503) : Results.Ok("Healthy (Port: " + port + ")");
//});
//app.MapGet("/health", () => Results.Ok("Healthy (Port: 5001)"));
app.MapGet("/health", () =>
{// 基础存活检查(不依赖任何业务逻辑)return Results.Ok("Alive");
});// 注册到Consul
var consulClient = app.Services.GetRequiredService<IConsulClient>();
var registration = new AgentServiceRegistration
{ID = "ServerAPI-5001",Name = "ServerAPI",Address = "192.168.0.102",Port = 5001,Check = new AgentServiceCheck{HTTP = "http://192.168.0.102:5001/health",Interval = TimeSpan.FromSeconds(3),  // 每3秒检查一次Timeout = TimeSpan.FromSeconds(1),  // 1秒无响应视为失败DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(10) // 10秒后自动移除}
};
consulClient.Agent.ServiceRegister(registration).Wait();
// 其他中间件
app.UseRouting();
app.MapControllers();// 配置Swagger(开发环境)
if (app.Environment.IsDevelopment())
{app.UseSwagger();app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "ServerAPI2 v1"));
}健康检查端点
//app.MapGet("/health", () => Results.Ok("Healthy"));// 路由和控制器
app.UseRouting();
app.MapControllers();// 应用停止时注销服务
app.Lifetime.ApplicationStopping.Register(() =>
{consulClient.Agent.ServiceDeregister(registration.ID).Wait();
});app.Run();

6.2 接口

using Microsoft.AspNetCore.Mvc;
using ServerAPI2.Models;namespace ServerAPI2.Controllers
{[ApiController][Route("api/[controller]")][Produces("application/json")]public class ValuesController : ControllerBase{/// <summary>/// 获取服务元数据/// </summary>[HttpGet("info")][ProducesResponseType(200)]public IActionResult GetInfo(){return Ok(new { Service = "ServerAPI2", Port = 8016 });}/// <summary>/// 字符串转换服务/// </summary>/// <param name="model">输入参数</param>[HttpPost("calculate")][ProducesResponseType(200)][ProducesResponseType(400)]public IActionResult Transform([FromBody] TestModel model){if (!ModelState.IsValid) return BadRequest(ModelState);return Ok(new { Result = $"{model.AAA}-{model.BBB}".ToUpper() });}[HttpGet("getail")] // 实现 /api/values/getailpublic IActionResult Get(){return Ok("This is /api/values/getail from ServerAPI2");}[HttpGet("setail")]public IActionResult Gett(){return Ok("This is /api/values/setail from " + GetType().Assembly.GetName().Name);}}
}

6.3 数据模型

    using System.ComponentModel.DataAnnotations;namespace ServerAPI2.Models{public class TestModel{[Required][StringLength(100)]public string AAA { get; set; }[StringLength(200)]public string BBB { get; set; }}}

7.发布形成Publish文件包

7.发布文件效果

8.运行Consul

8.1 显示双击文件夹内的Consul.exe

8.2 cmd进入Consul文件夹,运行指令:consul agent --config-file=C:\consul\config.json

9.运行服务

8.Publish文件夹内的Server1.exe\Server2.exe\OcelotDemo.exe,运行2个业务服务和网关服务

10.效果

相关文章:

Ocelot\Consul\.NetCore的微服务应用案例

案例资料链接&#xff1a;https://download.csdn.net/download/ly1h1/90733765 1.效果 实现两个微服务ServerAPI1和ServerAPI2的负载均衡以及高可用。具体原理&#xff0c;看以下示意图。 2.部署条件 1、腾讯云的轻量化服务器 2、WindowServer2016 3、.NETCore7.0 4、Negut …...

数值求解Eikonal方程的方法及开源实现

Eikonal方程是一类非线性偏微分方程&#xff0c;形式为 ( |\nabla u(x)| f(x) )&#xff0c;常见于波传播、几何光学、最短路径等问题。以下是数值求解Eikonal方程的方法及开源实现参考&#xff1a; 一、数值求解方法 有限差分法&#xff08;FDM&#xff09; 快速行进法&#…...

Http详解

&#x1f9f1; 一、从 TCP 三次握手到访问网页&#xff1a;两层过程 &#x1f9e9; 1. TCP 三次握手&#xff08;网络传输层&#xff09; 这是 建立连接 的前提&#xff0c;跟 HTTP 无关&#xff0c;但 HTTP 要依赖它。 举例&#xff1a;你打开浏览器访问 https://example.c…...

实验五 完整性

一、引言 本次上机实验的目的主要是让学生掌握数据库完整性的三大类型&#xff08;实体完整性、参照完整性、用户自定义完整性&#xff09;&#xff0c;并通过实际建库建表和数据操作加深理解。 下面将为分别展示 student、course、sc 三个表的创建语句&#xff0c;并设置对应的…...

《原码、反码与补码:计算机中的数字奥秘》

&#x1f680;个人主页&#xff1a;BabyZZの秘密日记 &#x1f4d6;收入专栏&#xff1a;C语言 &#x1f30d;文章目入 一、原码&#xff1a;最直观的表示法1. 正数的原码2. 负数的原码3. 原码的特点 二、反码&#xff1a;原码的“反转”1. 正数的反码2. 负数的反码3. 反码的特…...

论文笔记——QWen2.5 VL

目录 引言架构创新数据整理与训练策略性能与基准测试精细感知能力应用与现实世界影响与现有模型比较结论 引言 视觉理解和自然语言处理的集成一直是人工智能研究的一个重要焦点&#xff0c;促成了日益复杂的视觉语言模型 (VLMs) 的发展。由阿里巴巴集团 Qwen 团队开发的 Qwe…...

前端HTML基础知识

1.HTML介绍 HTML(HyperText Markup Language&#xff0c;超文本标记语言)是构成网页的基本元素&#xff0c;是一种用于创建网页的标准化标记语言。HTML不是一种编程语言&#xff0c;而是一种标记语言&#xff0c;通过标签来描述网页的结构和内容。 超文本&#xff1a;超文本是…...

程序代码篇---ESP32云开发

文章目录 前言 前言 本文简单介绍了实现 ESP32-S3 传感器数据上传至云平台 手机远程控制电机 的完整方案&#xff0c;涵盖推荐的云平台、手机端。 一、推荐云平台及工具 云平台选择 阿里云 IoT 平台 优势&#xff1a;国内稳定、支持大规模设备接入、提供完整设备管理及安全…...

【C语言】文本操作函数fseek、ftell、rewind

一、fseek int fseek ( FILE * stream, long int offset, int origin ); 重新定位文件指针的位置&#xff0c;使其指向以origin为基准、偏移offset字节的位置。 成功返回0&#xff0c;失败返回非零值&#xff08;通常为-1&#xff09;。 origin有如下三种&#xff1a;分别是…...

ARM ASM

ARM ASM ARM寄存器集 列出了ARM的16个程序员可见寄存器&#xff08;r0~r15&#xff09;以及它的状态寄存器。 ARM共有14个通用寄存器r0~r13。寄存器r13被保留用作栈指针&#xff0c;r14存放子程 序返回地址&#xff0c;r15为程序计数器。 由于r15能够被程序员访问&#xff0c…...

【五一培训】Day1

注&#xff1a; 1. 本次培训内容的记录将以“Topic”的方式来呈现&#xff0c;用于记录个人对知识点的理解。 2. 由于培训期间&#xff0c;作者受限于一些现实条件&#xff0c;本文的排版及图片等相关优化&#xff0c;需要过一段时间才能完成。 Topic 1&#xff1a;使用DeepS…...

SpringBoot使用分组校验解决同一个实体对象在不同场景下需要不同校验规则的问题

背景 添加分类的接口不需要id字段&#xff0c;但更新分类的接口需要id字段&#xff0c;当在id字段上使用NotNull注解时&#xff0c;会导致使用添加分类接口报id字段不能为空的错误 解决 定义分组 pojo/Category.java // 如果没有指定分组&#xff0c;则默认属于Default分组…...

Hibernate与MybatisPlus的混用问题(Invalid bound statement (not found))

当项目里已经有了Hibernate后&#xff1a; spring:jpa:hibernate:ddl-auto: updateshow-sql: trueproperties:hibernate:format_sql: true 再配置yml文件就会失效&#xff1a; mybatis-plus:mapper-locations: classpath:mapper/*.xml# 全局策略global-config:db-config:# 自…...

【音视频】ffplay数据结构分析

struct VideoState 播放器封装 typedef struct VideoState {SDL_Thread *read_tid; // 读线程句柄AVInputFormat *iformat; // 指向demuxerint abort_request; // 1时请求退出播放int force_refresh; // 1时需要刷新画⾯&#xff0c;请求⽴即刷新画⾯的意思int paused; // 1时…...

PV操作:宣帧闯江湖武林客栈版学习笔记【操作系统】

P,V,S江湖话翻译 P&#xff08;申请&#xff09; 江湖侠客拔剑大喊“掌柜的&#xff0c;给我一间上房&#xff01;”&#xff08;申请资源&#xff0c;房不够就蹲门口等&#xff09;-要房令牌 V&#xff08;释放&#xff09; 江湖侠客退房时甩出一锭银子&#xff0c;大喊“…...

精品推荐-湖仓一体电商数据分析平台实践教程合集(视频教程+设计文档+完整项目代码)

精品推荐&#xff0c;湖仓一体电商数据分析平台实践教程合集&#xff0c;包含视频教程、设计文档及完整项目代码等资料&#xff0c;供大家学习。 1、项目背景介绍及项目架构 2、项目使用技术版本及组件搭建 3、项目数据种类与采集 4、实时业务统计指标分析一——ODS分层设计与…...

对计网考研中的信道、传输时延、传播时延的理解

对计网考研中的信道、传输时延、传播时延的理解 在学习数据链路层流量控制和可靠传输那一节的三个协议的最大信道利用率时产生的疑惑 情景&#xff1a; 假如A主机和B主机通过集线器连接&#xff0c;A和集线器是光纤连接&#xff0c;B和集线器也是光纤连接&#xff0c;A给B发…...

RAGFlow报错:ESConnection.sql got exception

环境&#xff1a; Ragflowv0.17.2 问题描述&#xff1a; RAGFlow报错&#xff1a;ESConnection.sql got exception _ming_cheng_tks, 浙江, operatorOR;minimum_should_match30%) 2025-04-25 15:55:06,862 INFO 244867 POST http://localhost:1200/_sql?formatjson […...

报错:函数或变量 ‘calcmie‘ 无法识别。

1、具体报错 运行网上一个开源代码&#xff0c;但是运行报如下错&#xff1a; TT_para_gen 函数或变量 calcmie 无法识别。 出错 TT_para_gen>Mie (第 46 行) [S, C, ang,~] calcmie(rad, ns, nm, lambda, nang, ... 出错 TT_para_gen (第 17 行) [~,ang,Miee,C] …...

蓝桥杯获奖后心得体会

文章目录 获奖项备考心得&#x1f4d6; 蓝桥杯 Java 研究生组备考心得&#x1f4cc; 一、备考规划&#x1f4cc; 二、考试技巧&#x1f4cc; 三、心理调整&#x1f4cc; 四、总结 获奖项 JAVA研究生组省二 备考心得 好&#xff01;我来给你写一篇蓝桥杯研究生组Java方向的备…...

大鱼吃小鱼开源

因为知道一些学校也有相关C语言课设 所以这里对代码开源&#xff08;如果没有csdn会员请用夸克&#xff09; 我用夸克网盘分享了「大鱼吃小鱼-程序.zip」&#xff0c;点击链接即可保存。打开「夸克APP」&#xff0c;无需下载在线播放视频&#xff0c;畅享原画5倍速&#xff0…...

深度学习框架搭建(Vscode/Anaconda/CUDA/Pytroch)

目录 ​​​​​​一 Vscode安装 二、Anaconda安装 三、更新显卡驱动 四、安装CUDA 五、安装Pytorch 六、Vscode配置 七、出现的问题汇总 ​​​​​​一 Vscode安装 在 Windows 上安装 访问 VS Code 官网 https://code.visualstudio.com/&#xff0c;点击 "Downl…...

免费实用的图像处理工具箱​

提到图像处理&#xff0c;一般会想到Photoshop。的确PS比较专业&#xff0c;但是学习成本比较高。其实&#xff0c;针对具体的应用场景&#xff0c;选些简单的工具软件会更方便。 今天就给大家分享一款“洋芋田图像工具箱”软件。它支持Windows和Mac电脑。 用这款软件&#x…...

范式演进:从ETL到ELT及未来展望

范式演进:从ETL到ELT及未来展望 引言 随着数据规模与实时分析需求的爆发,传统的集中式 ETL(Extract-Transform-Load)已难以为继,ELT(Extract-Load-Transform)凭借云原生仓库的弹性计算与分析工程的兴起逐步成为主流。2025 年,数据团队正加速从“先变换再加载”走向“…...

定义一个3D cube,并计算cube每个顶点的像素坐标

定义一个3D cube,并计算cube每个顶点的像素坐标 scratch a pixel课程&#xff1a;Your Starting Point! 3D场景中物体所有点与坐标系原点的连线&#xff0c;该连线与像素平面canvas的交点就是场景中3D点其投影点的位置 3D场景中的点均由这个坐标系描述 相似三角形ABC和A’B’…...

Python学习笔记(第二部分)

接续 Python.md 文件的第二部分 字典 字典的基本操作 字典是一系列 键—值 对&#xff0c;每一个键都与一个值关联&#xff0c;值可以是数字&#xff0c;字符串&#xff0c;甚至是列表或字典&#xff0c;可以把任何python对象都作为字典中的值 alien {color:green,points:5}键…...

ZYNQB笔记(十六):AXI DMA 环路测试

版本&#xff1a;Vivado2020.2&#xff08;Vitis&#xff09; 任务&#xff1a;使用 PL 端的 AXI DMA IP 核实现对 DDR3 中数据的读取与写入&#xff0c;实现数据环回&#xff0c;具体流程为&#xff1a; PS 端产生测试数据并写入到 DDR3 中&#xff0c;然后 PL 端的 AXI DMA I…...

Java学习手册:Spring 数据访问

一、Spring JDBC JdbcTemplate &#xff1a;Spring JDBC 提供了 JdbcTemplate 类&#xff0c;它简化了数据库操作&#xff0c;提供了丰富的 API 来执行数据库访问任务。JdbcTemplate 可以自动处理数据库连接的获取、释放&#xff0c;SQL 语句的执行&#xff0c;结果集的处理等…...

第二章 日志分析-apache日志分析(玄机系列)

简介 账号密码 root apacherizhi ssh rootIP 1、提交当天访问次数最多的IP&#xff0c;即黑客IP&#xff1a; 2、黑客使用的浏览器指纹是什么&#xff0c;提交指纹的md5&#xff1a; 3、查看包含index.php页面被访问的次数&#xff0c;提交次数&#xff1a; 4、查看黑客IP访问了…...

类比分析AI Agent 技术

引言&#xff1a;AI Agent 的本质与范式转变 在人工智能领域&#xff0c;AI Agent&#xff08;智能体&#xff09;代表了一种从传统软件系统到自主性实体的深刻范式转变。不同于仅仅执行预设指令或算法的程序&#xff0c;现代 AI Agent 被设计为能够&#xff1a; 感知 (Perce…...

【业务领域】PCIE协议理解

PCIE协议理解 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 PCIE学习理解。 文章目录 PCIE协议理解[TOC](文章目录) 前言零、PCIE掌握点&#xff1f;一、PCIE是什么&#xff1f;二、PCIE协议总结物理层切速 链路层事务层6.2 TLP的路…...

设计模式简述(十四)组合模式

组合模式 描述基本使用所有节点方法一致使用 叶子无实现子节点使用 添加向上查询使用&#xff08;没变化&#xff09; 描述 组合模式用于描述部分与整体的关系&#xff0c;将个体对象与组合对象的行为统一&#xff0c;便于维护整个数据集。 基本使用 所有节点方法一致 定义…...

【Tool】vscode

vscode问题集锦 1 全局搜索失效 ctrl shift f 快捷键失效&#xff1a; 原因&#xff1a;可能与输入法快捷键冲突&#xff0c;重定义输入法快捷键即可 其他 看心情和经历补充&#xff5e;...

文件操作--文件包含漏洞

本文主要内容 脚本 ASP、PHP、JSP、ASPX、Python、Javaweb --# 各种包含函数 检测 白盒 代码审计 黑盒 漏扫工具、公开漏洞、手工看参数值及功能点 类型 本地包含 有限制、无限制 远程包含 无限制、有限制…...

数字智慧方案6156丨智慧医联体信息化解决方案(50页PPT)(文末有下载方式)

资料解读&#xff1a;智慧医联体信息化解决方案 详细资料请看本解读文章的最后内容。 在医疗改革不断深化的大背景下&#xff0c;医联体信息化建设成为推动医疗服务高质量发展的关键力量。《智慧医联体信息化解决方案》这份资料&#xff0c;全面且深入地阐述了医联体信息化建…...

华为eNSP:多区域集成IS-IS

一、什么是多区域集成IS-IS&#xff1f; 多区域集成IS-IS是一种基于中间系统到中间系统&#xff08;IS-IS&#xff09;协议优化的网络架构设计&#xff0c;通过多区域协同、路径优化和扩展性增强实现高效路由管理&#xff0c;其核心特征如下&#xff1a; 1、分布式架构与多区…...

RAG技术完全指南(一):检索增强生成原理与LLM对比分析

RAG技术完全指南&#xff08;一&#xff09;&#xff1a;检索增强生成原理与LLM对比分析 文章目录 RAG技术完全指南&#xff08;一&#xff09;&#xff1a;检索增强生成原理与LLM对比分析1. RAG 简介2. 核心思想3. 工作流程3.1 数据预处理&#xff08;索引构建&#xff09;3.2…...

(持续更新)Ubuntu搭建LNMP(Linux + Nginx + MySQL + PHP)环境

LNMP&#xff08;Linux Nginx MySQL PHP&#xff09;环境是在Linux操作系统上构建的一个高性能Web服务器环境。M也可以指代其他数据库&#xff0c;P也可以指代Python 1. 准备Linux系统 确保你已经在一台服务器或虚拟机上安装了Linux操作系统。推荐使用Ubuntu、CentOS或Debi…...

机器人手臂控制器:EMC电磁兼容解决(一)

一、机器人手臂控制器行业标准剖析 GB/T 39004—2020《工业机器人电磁兼容设计规范》 GB/T 37283-2019 服务机器人 电磁兼容 通用标准 抗扰度要求和限值 GB/T 39785-2021 服务机器人 机械安全评估与测试方法 GB/T 40014-2021 双臂工业机器人 性能及其试验方法 GB/T 40013-…...

Qt进阶开发:QSS常用的语法介绍和使用

文章目录 一、什么是QSS?二、QSS的基本语法三、QSS 的使用方式3.1 在代码中设置 QSS3.2 加载外部 QSS 文件四、QSS中选择器的介绍和使用4.1 Type Selector(类型选择器)4.2 ID Selector(ID 选择器)4.2.1 仅使用 ID(常见写法)4.2. 2 类型 + ID(更精确匹配)4.3 Class Sel…...

qemu学习笔记:QOM

2.4 QOM介绍 说明&#xff1a;小白学习qemu的一些学习笔记。主要是学习《QEMU&KVM源码解析与应用》这本书。 参考&#xff1a; 《QEMU&KVM源码解析与应用》作者&#xff1a;李强 Qemu - 百问网嵌入式Linux wiki QOM 定义&#xff1a;QEMU Object Model&#xff0c;是 Q…...

Spring AI开发跃迁指南(第二章:急速上手3——Advisor核心原理、源码讲解及使用实例)

1.Advisor简介 Spring AI 中的 Advisor 是一种核心机制&#xff0c;用于拦截和增强 AI 应用程序中的请求与响应流。其设计灵感来源于 Spring AOP&#xff08;面向切面编程&#xff09;中的切面&#xff08;Aspect&#xff09;概念&#xff0c;但专门针对 AI 交互场景进行了优化…...

51c嵌入式~单片机~合集9

我自己的原文哦~ https://blog.51cto.com/whaosoft/13884964 一、单片机中hex、bin文件的区别 单片机程序编译之后&#xff0c;除了生成hex文件之外还生成了bin文件&#xff0c;实际它们都是单片机的下载文件&#xff0c;下文介绍它们的区别。 Hex Hex文件包含地址信息。…...

linux学习——数据库API创建

一.API操作 1.int sqlite3_open(char *filename,sqlite3 **db) 功能&#xff1a;打开sqlite数据库 参数&#xff1a; filename:数据库文件路径 db:指向sqlite句柄的指针 &#xff08;splite3* db;&#xff09; 返回值…...

21.2Linux中的LCD驱动实验(驱动)_csdn

1、修改设备树 1.1、LCD 屏幕使用的 IO 配置 编译&#xff1a; make uImage LOADADDR0XC2000040 -j8 //编译内核复制给内核的镜像路径&#xff1a;1.2、LDTC 接口节点修改 1.3、输出接口的编写 2、在 panel-simple.c 文件里面添加屏幕参数 显示波浪线是因为alientek_desc 保存参…...

Dubbo(89)如何设计一个支持多语言的Dubbo服务?

设计一个支持多语言的Dubbo服务需要考虑以下几个方面&#xff1a; 服务接口设计&#xff1a;确保服务接口的定义可以被不同语言实现。序列化协议&#xff1a;选择一个支持多语言的序列化协议&#xff0c;例如Protobuf、Thrift、gRPC等。服务注册与发现&#xff1a;确保服务注册…...

油气地震资料数据中“照明”的含义

油气地震资料数据中“照明”的含义 在地震勘探中&#xff0c;“照明”&#xff08;Illumination&#xff09;是一个比喻性术语&#xff0c;用于描述地下地质构造被地震波能量覆盖的程度。其核心含义包括&#xff1a; 能量覆盖&#xff1a;指地震波&#xff08;如人工激发的地…...

[FPGA Video IP] Frame Buffer Read and Write

Xilinx Video Frame Buffer Read and Write IP (PG278) 详细介绍 概述 Xilinx LogiCORE™ IP Video Frame Buffer Read&#xff08;帧缓冲读取&#xff09;和 Video Frame Buffer Write&#xff08;帧缓冲写入&#xff09;核&#xff08;PG278&#xff09;是一对专为视频处理…...

新能源行业供应链规划及集成计划报告(95页PPT)(文末有下载方式)

资料解读&#xff1a;《数字化供应链规划及集成计划现状评估报告》 详细资料请看本解读文章的最后内容。 该报告围绕新能源行业 XX 企业供应链展开&#xff0c;全面评估其现状&#xff0c;剖析存在的问题&#xff0c;并提出改进方向和关键举措&#xff0c;旨在提升供应链竞争力…...

curl详解

curl 是一个常用的命令行工具&#xff0c;用于发送 HTTP 请求&#xff0c;支持包括 GET、POST、PUT、DELETE 等在内的多种 HTTP 方法。它非常适合用来测试 API、下载文件、与后端服务进行交互等。接下来&#xff0c;我会详细讲解 curl 的基本用法以及常见的应用场景。 &#x…...