(五)MMA(OpenTelemetry/Rabbit MQ/ApiGateway/MongoDB)

article/2025/7/1 14:31:08

文章目录

  • 项目地址
  • 一、OpenTelemetry
    • 1.1 配置OpenTelemetry
      • 1. 服务添加
      • 2. 添加服务标识
      • 3. 添加请求的标识
      • 4. 添加中间价
  • 二、Rabbit MQ
    • 2.1 配置Rabbit MQ
      • 1. docker-compose
      • 2. 添加Rabbit MQ的Connect String
    • 2.2 替换成Rabbit MQ
      • 1. 安装所需要的包
      • 2. 使用
  • 三、API Gateways
    • 3.1 创建Gateway
      • 1. 配置docker-compose
      • 2. 添加各种服务
      • 3. 添加jwt配置
      • 4. 添加日志追踪
      • 5. 配置appsettings
      • 6. Yarp反向代理设置
  • 四、微服务拆分
    • 4.1 创建新的Ticketing api
      • 1. 创建.net webapi 项目
      • 2. 安装包和引用
      • 3. 将公共api复制到该模块
      • 4. appsettings


项目地址

  • 教程作者:
  • 教程地址:
  • 代码仓库地址:
  • 所用到的框架和插件:
dbt 
airflow

一、OpenTelemetry

1.1 配置OpenTelemetry

1. 服务添加

  1. namespace Evently.Common.Infrastructure; 配置
        services.AddOpenTelemetry().ConfigureResource(resource => resource.AddService(serviceName)).WithTracing(tracing =>{tracing.AddAspNetCoreInstrumentation().AddHttpClientInstrumentation().AddEntityFrameworkCoreInstrumentation().AddRedisInstrumentation().AddNpgsql().AddSource(MassTransit.Logging.DiagnosticHeaders.DefaultListenerName);tracing.AddOtlpExporter();});

2. 添加服务标识

在这里插入图片描述

  1. 创建服务标识
namespace Evently.Api.OpenTelemetry;public static class DiagnosticsConfig
{public const string ServiceName = "Evently.Api";
}
  1. program里注册
    在这里插入图片描述

3. 添加请求的标识

  • 在RequestLoggingPipelineBehavior添加的请求和服务的标识

在这里插入图片描述

4. 添加中间价

在这里插入图片描述

  • LogContextTraceLoggingMiddleware
namespace Evently.Api.Middleware;
internal sealed class LogContextTraceLoggingMiddleware(RequestDelegate next)
{public Task Invoke(HttpContext context){string traceId = Activity.Current?.TraceId.ToString();using (LogContext.PushProperty("TraceId", traceId)){return next.Invoke(context);}}
}
  • MiddlewareExtensions 用于将自定义日志追踪中间件 LogContextTraceLoggingMiddleware 添加到 ASP.NET Core 的中间件管道中。
namespace Evently.Api.Middleware;
internal static class MiddlewareExtensions
{internal static IApplicationBuilder UseLogContextTraceLogging(this IApplicationBuilder app){app.UseMiddleware<LogContextTraceLoggingMiddleware>();return app;}
}
  • 中间件添加
    在这里插入图片描述

二、Rabbit MQ

2.1 配置Rabbit MQ

1. docker-compose

  • docker-compose.yml
evently.queue:image: rabbitmq:management-alpinecontainer_name: Evently.Queuehostname: evently-queuevolumes:- ./.containers/queue/data/:/var/lib/rabbitmq- ./.containers/queue/log/:/var/log/rabbitmqenvironment:RABBITMQ_DEFAULT_USER: guestRABBITMQ_DEFAULT_PASS: guestports:- 5672:5672- 15672:15672

2. 添加Rabbit MQ的Connect String

  "ConnectionStrings": {"Database": "Host=evently.database;Port=5432;Database=evently;Username=postgres;Password=postgres;Include Error Detail=true","Cache": "evently.redis:6379","Queue": "amqp://evently-queue:5672"},

2.2 替换成Rabbit MQ

1. 安装所需要的包

  • 替换之前内存为Rabbit MQ
  • 安装所需要的包
    <PackageReference Include="AspNetCore.HealthChecks.Rabbitmq" Version="8.0.1" /><PackageReference Include="MassTransit.RabbitMQ" Version="8.2.1" />
  1. 创建MQ配置文件
namespace Evently.Common.Infrastructure.EventBus;
public sealed record RabbitMqSettings(string Host, string Username = "guest", string Password = "guest");

2. 使用

  1. 修改MassTransit,将内存改为MQ
    在这里插入图片描述
  2. 注册Ticketing的消费者
    在这里插入图片描述
  3. 注册Event的消费者
    在这里插入图片描述
  4. Program里注册
    在这里插入图片描述

三、API Gateways

在这里插入图片描述

3.1 创建Gateway

在这里插入图片描述

1. 配置docker-compose

在这里插入图片描述

2. 添加各种服务

  • 在Gateway的program.cs里添加服务
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
builder.Host.UseSerilog((context, loggerConfig) => loggerConfig.ReadFrom.Configuration(context.Configuration));
builder.Services.AddReverseProxy().LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));builder.Services.AddOpenTelemetry().ConfigureResource(resource => resource.AddService(DiagnosticsConfig.ServiceName)).WithTracing(tracing =>{tracing.AddAspNetCoreInstrumentation().AddHttpClientInstrumentation().AddSource("Yarp.ReverseProxy");tracing.AddOtlpExporter();});builder.Services.AddAuthorization();
builder.Services.AddAuthentication().AddJwtBearer();
builder.Services.ConfigureOptions<JwtBearerConfigureOptions>();
WebApplication app = builder.Build();
app.UseLogContextTraceLogging();
app.UseSerilogRequestLogging();
app.UseAuthentication();
app.UseAuthorization();
app.MapReverseProxy();
app.Run();

3. 添加jwt配置

namespace Evently.Gateway.Authentication;
internal sealed class JwtBearerConfigureOptions(IConfiguration configuration): IConfigureNamedOptions<JwtBearerOptions>
{private const string ConfigurationSectionName = "Authentication";public void Configure(JwtBearerOptions options){configuration.GetSection(ConfigurationSectionName).Bind(options);}public void Configure(string? name, JwtBearerOptions options){Configure(options);}
}

4. 添加日志追踪

  1. 添加日志追踪
using System.Diagnostics;
using Serilog.Context;
namespace Evently.Gateway.Middleware;
internal sealed class LogContextTraceLoggingMiddleware(RequestDelegate next)
{public Task Invoke(HttpContext context){string traceId = Activity.Current?.TraceId.ToString();using (LogContext.PushProperty("TraceId", traceId)){return next.Invoke(context);}}
}
  1. 注册
namespace Evently.Gateway.Middleware;
internal static class MiddlewareExtensions
{internal static IApplicationBuilder UseLogContextTraceLogging(this IApplicationBuilder app){app.UseMiddleware<LogContextTraceLoggingMiddleware>();return app;}
}

5. 配置appsettings

  • 基础设置
{"Authentication": {"Audience": "account","TokenValidationParameters": {"ValidIssuers": [ "http://evently.identity:8080/realms/evently", "http://localhost:18080/realms/evently" ]},"MetadataAddress": "http://evently.identity:8080/realms/evently/.well-known/openid-configuration","RequireHttpsMetadata": false},"Serilog": {"Using": ["Serilog.Sinks.Console","Serilog.Sinks.Seq"],"MinimumLevel": {"Default": "Information","Override": {"Microsoft": "Information"}},"WriteTo": [{ "Name": "Console" },{"Name": "Seq","Args": { "serverUrl": "http://evently.seq:5341" }}],"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],"Properties": {"Application": "Evently.Gateway"}},"OTEL_EXPORTER_OTLP_ENDPOINT": "http://evently.jaeger:4317",
}

6. Yarp反向代理设置

在这里插入图片描述

四、微服务拆分

我现在有个单体架构的票务系统,但是当业务高峰期的时候,突然订票剧增,我想单独把票务拆出来做微服务可以吗,其次由于我想控制成本,平时只想一个实例运行这个微服务,当业务高峰期,需要自动扩充到4个

4.1 创建新的Ticketing api

1. 创建.net webapi 项目

在这里插入图片描述

2. 安装包和引用

<Project Sdk="Microsoft.NET.Sdk.Web"><PropertyGroup><UserSecretsId>ab603965-9d79-46f7-b0fd-56e950ec7073</UserSecretsId><DockerDefaultTargetOS>Linux</DockerDefaultTargetOS><DockerfileContext>..\..\..</DockerfileContext><DockerComposeProjectPath>..\..\..\docker-compose.dcproj</DockerComposeProjectPath></PropertyGroup><ItemGroup><PackageReference Include="AspNetCore.HealthChecks.UI.Client" Version="8.0.1" /><PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.4" /><PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.4"><PrivateAssets>all</PrivateAssets><IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets></PackageReference><PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.20.1" /><PackageReference Include="Serilog.AspNetCore" Version="8.0.1" /><PackageReference Include="Serilog.Sinks.Seq" Version="7.0.0" /><PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" /></ItemGroup><ItemGroup><ProjectReference Include="..\..\Modules\Ticketing\Evently.Modules.Ticketing.Infrastructure\Evently.Modules.Ticketing.Infrastructure.csproj" /></ItemGroup>
</Project>

3. 将公共api复制到该模块

在这里插入图片描述

4. appsettings

  1. appsettings.json
{"ConnectionStrings": {"Database": "","Cache": "","Queue": ""},"AllowedHosts": "*","Authentication": {"Audience": "","TokenValidationParameters": {"ValidIssuers": []},"MetadataAddress": "","RequireHttpsMetadata": false},"KeyCloak": {"HealthUrl": ""},"Serilog": {"Using": ["Serilog.Sinks.Console"],"MinimumLevel": {"Default": "Information","Override": {"Microsoft": "Information"}},"WriteTo": [{ "Name": "Console" }],"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],"Properties": {"Application": "Evently.Ticketing.Api"}},"OTEL_EXPORTER_OTLP_ENDPOINT": ""
}
  1. appsettings.Development.json
{"ConnectionStrings": {"Database": "Host=evently.database;Port=5432;Database=evently;Username=postgres;Password=postgres;Include Error Detail=true","Cache": "evently.redis:6379","Queue": "amqp://evently-queue:5672"},"Authentication": {"Audience": "account","TokenValidationParameters": {"ValidIssuers": [ "http://evently.identity:8080/realms/evently", "http://localhost:18080/realms/evently" ]},"MetadataAddress": "http://evently.identity:8080/realms/evently/.well-known/openid-configuration","RequireHttpsMetadata": false},"KeyCloak": {"HealthUrl": "http://evently.identity:8080/health/"},"Serilog": {"Using": ["Serilog.Sinks.Console","Serilog.Sinks.Seq"],"MinimumLevel": {"Default": "Information","Override": {"Microsoft": "Information","Evently.Modules.Ticketing.Infrastructure.Outbox": "Warning","Evently.Modules.Ticketing.Infrastructure.Inbox": "Warning"}},"WriteTo": [{ "Name": "Console" },{"Name": "Seq","Args": { "serverUrl": "http://evently.seq:5341" }}],"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],"Properties": {"Application": "Evently.Ticketing.Api"}},"OTEL_EXPORTER_OTLP_ENDPOINT": "http://evently.jaeger:4317"
}

http://www.hkcw.cn/article/NrTGDCqCnT.shtml

相关文章

罗茨真空泵与螺杆真空泵(更高精度)的区别

真空泵是一种用于抽取气体分子&#xff0c;从而产生一定真空度的设备。 1、罗茨真空泵与螺杆真空泵的对比分析 罗茨真空泵&#xff0c;其核心构造为泵内装设的两个反向同步旋转的叶形转子。这些转子之间以及与泵壳内壁之间&#xff0c;都保持着细小的间隙&#xff0c;从而实现…

python训练 60天挑战-day40

昨天我们介绍了图像数据的格式以及模型定义的过程&#xff0c;发现和之前结构化数据的略有不同&#xff0c;主要差异体现在2处 模型定义的时候需要展平图像由于数据过大&#xff0c;需要将数据集进行分批次处理&#xff0c;这往往涉及到了dataset和dataloader来规范代码的组织…

【CF】Day70——Codeforces Round 896 (Div. 2) CD1 (排列 + 构造 | ⭐思维 + 数学)

C. Fill in the Matrix 题目&#xff1a; 思路&#xff1a; 感觉似曾相识 对于这种排列构造的题目&#xff0c;我们肯定是先找规律然后再想构造&#xff08;虽然我结论想出来但没找到一般构造方法&#xff09; 由于这一题是求 mex &#xff0c;那我们可以尝试看看能不能构造出…

华为OD机试真题——阿里巴巴找黄金宝箱 IV(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《阿里巴巴找黄金宝箱 IV》:…

AI的出现,是否能替代IT从业者?

引言 近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术取得了突破性进展&#xff0c;从机器学习、自然语言处理到计算机视觉&#xff0c;AI正在深刻改变各行各业。在信息技术&#xff08;IT&#xff09;领域&#xff0c;AI技术已被广泛应用于软件开发、系统运维、数…

午休时间发生的一场中国职业足球该如何解困的讨论 寻找黑暗中的光亮

文艺界、商界和体育界关于中国足球的争论再次出现。这些讨论往往开始得莫名其妙,发展过程中各说各话,最终在上了几次微博热搜后被其他话题取代。然而,对于中国足球而言,仍需在孤独与愤懑中寻找光明。当前关于中国足球的讨论已经很多,但真正有价值的见解却很少。这篇文章或…

北京一小区惊现“钞票雨”?民警:非有人故意撒钱!系工人施工碰倒钱箱:网络谣言勿信

5月29日,北京昌平区住总万科天地一带发生了一起引人关注的事件。有市民发帖称,有人在楼上撒钱,金额高达一千万元。视频画面中可以看到空中飘着几张纸币,楼下有市民在接钱。次日,北京七里渠派出所工作人员回应称,当事人是不小心掉的钱,并提醒市民不要听信网络谣言。至于掉…

3分钟回顾马斯克130天政治生涯 理想与现实的碰撞

据美国有线电视新闻最新报道,一名白宫官员证实马斯克将于28日晚开始办理离职程序。这让全球马斯克的粉丝们开始回味他入驻白宫这130天的经历。2025年1月20日,特朗普宣誓就职时,马斯克以政府效率部(DOGE)掌门人的身份踏入权力核心。这个机构被赋予了在18个月内削减2万亿美元…

男子纵身跳进兵马俑坑 推倒两尊兵马俑 现场目击者震惊

5月30日下午6时许,陕西秦始皇兵马俑博物馆发生了一起意外事件。一名男子在兵马俑3号坑纵身跳下,并推倒了两尊兵马俑。据现场目击者小林回忆,当时他跟随导游前往3号坑,刚一进去就看到这名男子跳入俑坑,先是跳到中间一层,随后又跳到俑坑下方。小林表示,自己和周围的游客都…

FastAPI 项目配置管理

安装Dynaconf Dynaconf 是一个强大的 Python 配置管理库&#xff0c;它支持多种文件格式&#xff08;如 JSON、YAML、TOML 和 .env 文件&#xff09;和环境变量来管理应用程序的配置。使用 Dynaconf&#xff0c;您可以轻松地在不同环境&#xff08;例如开发、测试和生产&#…

FPGA管脚类型,及选择

fpga的IO Type选择&#xff0c;如下&#xff1a; 具体的定义&#xff1a;

c++数据结构9——set结构详解

一、set以二叉查找树为基础 二叉查找树&#xff08;Binary Search Tree&#xff0c;BST&#xff09;是一种特殊的二叉树结构&#xff0c;具有以下特点&#xff1a; 左子树所有节点值小于根节点值 右子树所有节点值大于根节点值 左右子树也都是二叉查找树 图例&#xff1a;…

马克龙香会首秀倡“第三条道路” 吁欧亚共寻战略自主

第22届香格里拉对话会于5月30日在新加坡开幕,法国总统马克龙发表了主旨演讲。他呼吁亚洲各国与欧洲建立新联盟,通过开放贸易和对话以及在防务和安全方面加强合作,以打造一个稳定的环境并维护以规则为基础的国际秩序。北京外国语大学区域与全球治理高等研究院教授崔洪建表示,…

胖东来红内裤案当事人鞠躬道歉 名誉侵权案宣判

2025年5月28日,许昌市魏都区人民法院公开审理了原告许昌市胖东来商贸集团有限公司与被告段某的名誉权纠纷案,并当庭宣判。法院判决段某在其个人抖音账号“两个小段(小)”发布宣读书面道歉信的视频,书面道歉信需经法院审核,发布后30日内不得删除;段某赔偿许昌市胖东来商贸…

媒体人:特朗普在准备关税B计划 两步走应对法律挑战

美国总统特朗普提出的“对等关税”政策实施近两个月,但效果并不理想,还面临严峻的法律挑战。美国上诉法院暂时恢复了关税措施后,特朗普贸易团队正在为关税政策制定备用计划,以防止谈判因法律问题中断。《华尔街日报》5月30日援引消息人士的话称,特朗普团队正考虑一项两步走…

巴方为何突袭巴控克什米尔武装分子 挫败袭击基地企图

巴控克什米尔地区警方于5月29日表示,当地安全部队根据情报突袭了该地区一处武装分子藏身点,随后的枪战导致2名警察和4名巴基斯坦塔利班组织成员死亡。此次夜间突袭发生在拉沃拉果德县。当地警方负责人阿卜杜勒贾巴尔表示,被打死的武装分子隶属于巴基斯坦塔利班组织,并声称该…

端午其实是古人的卫生防疫日 解码香囊养生智慧

解码传统习俗健康密码,聚焦端午养生智慧。端午节历史悠久,蕴藏着中国最早的“卫生防疫”基因。这个节日不仅承载着丰富的文化内涵,还与现代公共卫生理念不谋而合。端午节是中国重要的传统节日,被称为“中国最早的卫生防疫日”。古代先民通过特定习俗与仪式,在仲夏时节主动…

上海独居老人3000万豪宅堆满垃圾 生活令人匪夷所思

中海建国里是上海的顶级豪宅,单价达到每平米23万元。一套160平米的房子总价超过3600万元。然而,有一位上海大妈住在价值3700万的豪宅里,却过着令人难以置信的生活。她喜欢捡垃圾,并且将这些垃圾堆在家里。时间久了,家里充满了苍蝇、蚊子、蟑螂,甚至有死老鼠。楼道里的垃圾…

媒体人:美用签证工具破坏教育交流 无理取闹损人不利己

近日,美国国务卿鲁比奥宣布将开始吊销中国学生签证,这一消息引起广泛关注。鲁比奥在社交媒体上表示,要吊销与中国政府有联系或在关键领域学习的中国学生签证。美国国务院网站也发布声明,称新签证政策优先考虑美国利益,并将与国土安全部合作推进吊销事宜,同时加强对中国学…

机器视觉运动控制一体机在背靠背点胶焊锡机上的应用

市场应用背景 点胶与焊锡作为制造业自动化关键环节&#xff0c;专注服务电子、半导体、汽车及医疗等领域的高精密工艺需求。精密高速点胶焊锡解决方案通过实现高精高效的流体控制与焊接操作&#xff0c;助力企业实现生产效率与产品品质的双重提升。 ▲ 待加工的PCB板 ▲ 点胶…