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

怎么做网站注册系统百度推广一个月费用

怎么做网站注册系统,百度推广一个月费用,室内装修图片效果图,镇江网站建设门户报价ABP vNext Dapr 实现云原生微服务治理 🚀 前言 📝 随着云原生与微服务架构的快速发展,相关工具和框架也在不断演进。ABP vNext 是一套成熟而现代的 .NET 应用开发框架,在模块化、领域驱动设计等方面提供强大支持。而 Dapr 作为…

ABP vNext + Dapr 实现云原生微服务治理 🚀

前言 📝

随着云原生与微服务架构的快速发展,相关工具和框架也在不断演进。ABP vNext 是一套成熟而现代的 .NET 应用开发框架,在模块化、领域驱动设计等方面提供强大支持。而 Dapr 作为一个轻量级、事件驱动的微服务运行时,提供服务发现、发布订阅、配置管理等能力,极大降低了构建分布式系统的复杂性。

本文将结合实际案例,介绍如何集成 ABP vNext 与 Dapr,实现服务间调用、配置集中管理、日志追踪、事件驱动等微服务治理能力。

一、环境搭建 🧰

技术栈

  • 基础框架:ABP vNext (.NET 8)
  • 微服务运行时:Dapr 1.13+
  • 配置中心:Dapr Configuration API + Redis (推荐 Redis 6.0+)
  • 服务调用:Dapr Service Invocation
  • 链路追踪与日志:OpenTelemetry + Zipkin + Serilog
  • 部署方式:Docker Compose

NuGet 包依赖(建议版本)

  • Volo.Abp.Dapr (>=8.4.0)
  • Dapr.AspNetCore (>=1.13.1)
  • Dapr.Client
  • Dapr.Extensions.Configuration
  • OpenTelemetry.Exporter.Zipkin
  • OpenTelemetry.Extensions.Hosting
  • Serilog.AspNetCore
  • StackExchange.Redis

二、初始化与模块注册 🔧

1. 安装 Dapr CLI

wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash
dapr init

2. 创建 ABP 项目

abp new DaprMicroservice -t app --ui none

3. 注册 Dapr 模块依赖

[DependsOn(typeof(AbpDaprModule))]
public class OrderServiceModule : AbpModule
{public override void ConfigureServices(ServiceConfigurationContext context){context.Services.Configure<AbpDaprRemoteServiceOptions>(opt =>{opt.RemoteServices.Default.Protocol = "http";opt.RemoteServices.Default.Address = "http://localhost:3500";opt.RemoteServices.Default.DaprClientRetryPolicy = new DaprClientRetryPolicy{MaxRetryCount = 3,Delay = TimeSpan.FromSeconds(2)};});}
}

三、配置组件定义 ⚙️

在项目根目录下创建 components 文件夹,并添加以下配置:

1. 发布订阅组件:components/pubsub.yaml

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:name: pubsub
spec:type: pubsub.redisversion: v1metadata:- name: redisHostvalue: "localhost:6379"- name: redisPasswordvalue: "${REDIS_PASSWORD}"

2. 配置中心组件:components/configuration.yaml

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:name: config-store
spec:type: configuration.redisversion: v1metadata:- name: redisHostvalue: "localhost:6379"- name: redisPasswordvalue: "${REDIS_PASSWORD}"

四、服务控制器示例 🛎️

[ApiController]
[Route("api/[controller]")]
public class OrderController : ControllerBase
{private readonly ILogger<OrderController> _logger;private readonly IEmailService _emailService;public OrderController(ILogger<OrderController> logger, IEmailService emailService){_logger = logger;_emailService = emailService;}[Topic("pubsub", "order-placed")][HttpPost("order-placed")]public async Task<IActionResult> HandleOrderPlacedAsync([FromBody] OrderPlacedEvent @event){if (@event?.OrderId == null) return BadRequest("Invalid order event");_logger.LogInformation("接收到订单:{OrderId}", @event.OrderId);try{await _emailService.SendOrderConfirmationAsync(@event.OrderId);}catch (Exception ex){_logger.LogError(ex, "邮件发送失败,OrderId={OrderId}", @event.OrderId);// 可考虑写入死信队列或执行重试策略}return Ok();}
}

五、应用启动配置 🧩

var builder = WebApplication.CreateBuilder(args);builder.Services.AddControllers().AddDapr();
builder.Services.AddDaprClient();
builder.Configuration.AddDaprConfigurationStore("config-store", new[] { "application" });builder.Services.AddOpenTelemetryTracing(b =>
{b.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("OrderService")).AddAspNetCoreInstrumentation().AddHttpClientInstrumentation().AddZipkinExporter(o =>{o.Endpoint = new Uri("http://zipkin:9411/api/v2/spans");o.ServiceName = "OrderService";}).SetSampler(new TraceIdRatioBasedSampler(0.5));
});builder.Host.UseSerilog((ctx, cfg) =>cfg.ReadFrom.Configuration(ctx.Configuration).Enrich.FromLogContext().WriteTo.Console());builder.Services.AddHealthChecks().AddRedis("localhost:6379", name: "redis").AddUrlGroup(new Uri("http://localhost:3500/v1.0/healthz"), name: "dapr");var app = builder.Build();app.UseCloudEvents();
app.MapSubscribeHandler();
app.MapControllers();
app.MapHealthChecks("/health");app.Lifetime.ApplicationStopping.Register(Log.CloseAndFlush);
app.Run();

六、Docker Compose 部署 🐳

docker-compose.yml
version: '3.8'
services:redis:image: redis:6container_name: redisvolumes:- redis-data:/datazipkin:image: openzipkin/zipkincontainer_name: zipkinports:- "9411:9411"order-service:build: .container_name: order-serviceenvironment:- ASPNETCORE_ENVIRONMENT=Development- DAPR_HTTP_PORT=3500- REDIS_PASSWORD=your_password_herecommand: >dapr run --app-id order-service \--app-port 5000 \--dapr-http-port 3500 \--components-path ./components \dotnet DaprMicroservice.dllports:- "5000:5000"- "3501:3500"volumes:- ./components:/app/componentsvolumes:redis-data:

💡 提示:构建前请执行 dotnet publish -c Release -o publish,并确保 Dockerfile 配置如下:

# Dockerfile 示例
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY publish/ .
COPY components/ ./components
ENTRYPOINT ["dotnet", "DaprMicroservice.dll"]

七、服务交互架构图 ✅

graph LRA[Client] -->|HTTP| B[OrderService (ABP)]B -->|Dapr Invoke| C[ProductService (ABP)]B -->|Publish| D[(Redis PubSub)]D --> E[EmailService]B --> F[Zipkin]

总结 📌

通过将 ABP vNext 与 Dapr 集成,可以实现模块化、高可用、事件驱动的微服务治理能力,具备以下优势:

  • 服务间解耦,基于 pub/sub 架构实现高可靠通信
  • 配置、日志、链路追踪集中化治理,提升系统可观察性
  • Dapr 提供语言无关的运行时组件,增强跨平台可移植性

📚 推荐文档参考:

  • Dapr 官方文档
  • ABP vNext 文档
  • OpenTelemetry 入门
http://www.dtcms.com/wzjs/252950.html

相关文章:

  • 网站建设+深圳+凡科信息流优化师怎么入行
  • apache网站部署关键词搜索量查询工具
  • 网站建设 的类型有哪些方面今日要闻新闻
  • 奎屯建设局网站查网站权重
  • 台州网站建设网站推广抖音搜索引擎优化
  • 找客户去哪个平台东莞做网站优化
  • 购物网站主页怎么做河北百度推广
  • 海南网站建设基本流程网站发布与推广怎么写
  • 济南市工程建设技术监督局网站全网关键词云怎么查
  • 建设人力资源网站目标公司宣传推广方案
  • 织梦模板下载商城网站模板(高端大气上档次:带数据)网络广告的发布方式包括
  • 仿 wordpress主题网站内链优化
  • 企业开通网站的费用怎么做分录全网推广系统
  • 开网站做彩票赚钱吗腾讯广告联盟官网
  • 在记算机上登陆一个网站点怎么做厦门人才网官方网站
  • 企业网站的功能列表万网官网
  • 个人网站教程外链在线生成
  • smartschool 学校网站管理系统百度ai人工智能
  • 重庆航运建设发展有限公司 网站简述seo对各类网站的作用
  • 网站建设海报设计哈尔滨最新今日头条新闻
  • 淘宝网站首页设计分析seo网址超级外链工具
  • 怎么做宣传网站百度识图扫一扫入口
  • 晋中建设局查合同网站关键词seo服务
  • wordpress登陆新域名seo兼职招聘
  • 网站会对特殊的ip做跳转淘宝数据查询
  • 政府网站制作费用推广公司主要做什么
  • 福州网站建设哪个好河南网站推广
  • 权重高的网站有哪些做网站找哪个公司好
  • 广东购物网站建设报价百度指数搜索榜
  • 网站企业优化廊坊快速优化排名