ABP VNext + Tye:本地微服務編排與調試

ABP VNext + Tye:本地微服務編排與調試 🚀


📚 目錄

  • ABP VNext + Tye:本地微服務編排與調試 🚀
    • TL;DR ?
    • 一、環境與依賴 🛠?
    • 二、核心配置詳解 🚀
      • 1. 主配置 `tye.yaml`
    • 三、多環境文件 🌱🌳
      • `tye.development.yaml`
      • `tye.production.yaml`
    • 四、依賴容器定義 🐳
    • 五、ABP VNext 集成 🔌
      • 1. NuGet 包
      • 2. `appsettings.json`
      • 3. 分布式緩存 & 鎖 🔒
      • 4. RabbitMQ & CAP 🐰
      • 5. 全鏈路追蹤 🕵?
    • 六、一鍵啟動 & 驗證 ?
    • 七、流程圖 📊
      • 1. 配置加載與啟動
      • 2. 服務依賴關系
    • 八、斷點調試 🎯
      • VS Code Attach
      • 調試序列圖
    • 九、進階與安全 🛠?🔒


TL;DR ?

  • 🚀 一鍵編排:ABP VNext 微服務 + SQL Server、Redis、RabbitMQ、Jaeger,tye run --env … 即可全量本地啟動
  • 💪 高可用 & 性能:雙保險健康檢查、資源 requests/limits、多副本、死信隊列與自動重試
  • 🔍 全鏈路可觀測:HTTP/gRPC/EF Core Trace → Jaeger UI → Tye Dashboard

一、環境與依賴 🛠?

  1. 必備工具

    • .NET 6+ SDK

    • ABP VNext 6.x(Volo.Abp.* 系列)

    • Microsoft Tye CLI

      dotnet tool install -g Microsoft.Tye --version "0.12.0-alpha.*"
      
    • Docker Desktop(含 SQL Server、Redis、RabbitMQ、Jaeger 鏡像)

  2. 容器鏡像

    • SQL Server 2022:mcr.microsoft.com/mssql/server:2022-latest
    • Redis 7:redis:7
    • RabbitMQ 3-management:rabbitmq:3-management
    • Jaeger All-in-One:jaegertracing/all-in-one:1.49
  3. 項目結構

    abp-tye-demo/
    ├─ services/
    │   ├─ IdentityService/
    │   ├─ OrderService/
    │   └─ ProductService/
    ├─ tye.yaml
    ├─ tye.development.yaml
    ├─ tye.production.yaml
    ├─ docker-compose.override.yml
    └─ README.md
    

二、核心配置詳解 🚀

1. 主配置 tye.yaml

name: abp-tye-demosecrets:- name: Jwt__Keyservices:# —— 外部依賴 —— - name: sqldockerCompose:file: docker-compose.override.yml- name: redisdockerCompose:file: docker-compose.override.yml- name: rabbitmqdockerCompose:file: docker-compose.override.yml- name: jaegerdockerCompose:file: docker-compose.override.yml# —— ABP 微服務 —— - name: identityproject: services/IdentityService/IdentityService.csprojbindings:- port: 5001env:ConnectionStrings__Default: "Server=sql;User Id=sa;Password=Your_password123;"Redis__Configuration: "redis:6379"RabbitMQ__HostName: "rabbitmq"RabbitMQ__User: "tye"RabbitMQ__Pass: "tyePass123"Jaeger__AgentHost: "jaeger"Jaeger__AgentPort: "6831"Jwt__Key: "Jwt__Key"- name: orderproject: services/OrderService/OrderService.csprojbindings:- port: 5002env:ConnectionStrings__Default: "Server=sql;User Id=sa;Password=Your_password123;"Redis__Configuration: "redis:6379"RabbitMQ__HostName: "rabbitmq"RabbitMQ__User: "tye"RabbitMQ__Pass: "tyePass123"Jaeger__AgentHost: "jaeger"Jaeger__AgentPort: "6831"- name: productproject: services/ProductService/ProductService.csprojbindings:- port: 5003env:ConnectionStrings__Default: "Server=sql;User Id=sa;Password=Your_password123;"Redis__Configuration: "redis:6379"RabbitMQ__HostName: "rabbitmq"RabbitMQ__User: "tye"RabbitMQ__Pass: "tyePass123"Jaeger__AgentHost: "jaeger"Jaeger__AgentPort: "6831"
  • 多環境自動合并tye run --env development|production 會加載對應文件
  • Secrets:通過 tye secret set Jwt__Key ... 注入
  • RabbitMQ 用戶guest 僅限本地,容器間需自定義用戶

三、多環境文件 🌱🌳

tye.development.yaml

services:- name: identityreplicas: 1- name: orderreplicas: 1- name: productreplicas: 1

tye.production.yaml

services:- name: identityreplicas: 2resources:requests:cpu: "0.25"memory: "256Mi"limits:cpu: "0.5"memory: "512Mi"- name: orderreplicas: 2resources:requests:cpu: "0.25"memory: "256Mi"limits:cpu: "0.5"memory: "512Mi"- name: productreplicas: 2resources:requests:cpu: "0.25"memory: "256Mi"limits:cpu: "0.5"memory: "512Mi"

四、依賴容器定義 🐳

version: '3.4'
services:sql:image: mcr.microsoft.com/mssql/server:2022-latestenvironment:SA_PASSWORD: "Your_password123"ACCEPT_EULA: "Y"ports:- "1433:1433"volumes:- ./mssql-data:/var/opt/mssqlhealthcheck:test: ["CMD", "sh", "-c", "if nc -z localhost 1433; then exit 0; else exit 1; fi"]interval: 10sretries: 5redis:image: redis:7ports:- "6379:6379"healthcheck:test: ["CMD", "redis-cli", "ping"]interval: 10sretries: 5rabbitmq:image: rabbitmq:3-managementenvironment:RABBITMQ_DEFAULT_USER: "tye"RABBITMQ_DEFAULT_PASS: "tyePass123"ports:- "5672:5672"    # AMQP- "15672:15672"  # Management UIhealthcheck:test: ["CMD", "rabbitmq-diagnostics", "ping"]interval: 10sretries: 5jaeger:image: jaegertracing/all-in-one:1.49ports:- "16686:16686"     # Jaeger UI- "6831:6831/udp"   # Trace 數據
  • 數據持久化:SQL Server volume
  • 網絡說明:Linux 可選 network: host

五、ABP VNext 集成 🔌

1. NuGet 包

<PackageReference Include="Volo.Abp.AspNetCore" Version="6.*" />
<PackageReference Include="Volo.Abp.DistributedLocking.Redis" Version="6.*" />
<PackageReference Include="Volo.Abp.EventBus.CAP" Version="6.*" />

2. appsettings.json

{"ConnectionStrings": {"Default": "Server=sql;User Id=sa;Password=Your_password123;"},"Redis": {"Configuration": "redis:6379"},"RabbitMQ": {"HostName": "rabbitmq","Port": 5672,"User": "tye","Pass": "tyePass123"},"Jaeger": {"AgentHost": "jaeger","AgentPort": 6831},"Jwt": {"Key": ""}
}

3. 分布式緩存 & 鎖 🔒

builder.Services.AddStackExchangeRedisCache(options =>{options.Configuration = builder.Configuration["Redis:Configuration"];}).AddAbpDistributedLock(sp =>sp.AddRedisLock(builder.Configuration["Redis:Configuration"]));

4. RabbitMQ & CAP 🐰

builder.Services.AddCap(options =>
{options.UseRabbitMQ(cfg =>{cfg.HostName = builder.Configuration["RabbitMQ:HostName"];cfg.Port = int.Parse(builder.Configuration["RabbitMQ:Port"]);cfg.UserName = builder.Configuration["RabbitMQ:User"];cfg.Password = builder.Configuration["RabbitMQ:Pass"];});options.UseDashboard();options.FailedRetryCount = 5;
});// 事件訂閱示例
public class OrderCreatedConsumer : ICapSubscribe
{[CapSubscribe("order.created")]public Task Handle(OrderCreatedEvent evt) => /*...*/;
}

5. 全鏈路追蹤 🕵?

builder.Services.AddOpenTelemetryTracing(tp =>
{tp.AddAspNetCoreInstrumentation().AddHttpClientInstrumentation().AddGrpcClientInstrumentation().AddEntityFrameworkCoreInstrumentation().AddJaegerExporter(opts =>{opts.AgentHost = builder.Configuration["Jaeger:AgentHost"];opts.AgentPort = int.Parse(builder.Configuration["Jaeger:AgentPort"]);});
});

六、一鍵啟動 & 驗證 ?

# 注入 Secret
tye secret set Jwt__Key --value "YourSuperSecretKey"# 啟動服務
tye run --env production --watch
  • 驗證副本 & 資源tye describe

  • 訪問監控

    功能地址
    Tye Dashboardhttp://localhost:8000
    RabbitMQ UIhttp://localhost:15672
    Jaeger UIhttp://localhost:16686

七、流程圖 📊

1. 配置加載與啟動

合并配置
環境變量
自動加載 tye.production.yaml
合并到 tye.yaml
tye run --env production
Tye Runtime 啟動
服務列表
sql, redis, rabbitmq, jaeger
identity, order, product

2. 服務依賴關系

Services
Containers
Trace
Trace
Trace
Metrics & Logs
Metrics & Logs
Metrics & Logs
IdentityService
5001
OrderService
5002
ProductService
5003
SQL Server
1433
Redis
6379
RabbitMQ
5672
Jaeger
6831/UDP
Tye Dashboard

八、斷點調試 🎯

VS Code Attach

{"version": "0.2.0","configurations": [{"name": "Attach to Tye IdentityService","type": "coreclr","request": "attach","processName": "dotnet","justMyCode": false}]
}

調試序列圖

開發者Tye RuntimeVS CodeIdentityServicetye run --watchAttach DebuggerAttach to processBreakpoint Hit開發者Tye RuntimeVS CodeIdentityService

Tip:遇到 IIS Express 沖突,切換至 “Project” 啟動或在 launchSettings.json 指定 --urls http://*:5001


九、進階與安全 🛠?🔒

  1. 自定義 Dockerfile

    - name: custom-servicecontainer:dockerFile: services/Custom/Dockerfileimage: myorg/custom:latest
    
  2. 公網隧道

    tye proxy identity --bind 5001
    

    ?? 僅限測試,生產請結合 API Gateway/認證。

  3. 網絡模式

    • Linux 可選 network: host
    • 跨宿主機訪問時可自定義 Docker 網絡

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/913763.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913763.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913763.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue響應式原理一:認識響應式邏輯

核心思想&#xff1a;當數據發生變化時&#xff0c;依賴該數據的代碼能夠自動重新執行Vue中的應用&#xff1a;在data或ref/reactive中定義的數據&#xff0c;當數據變化時template會自動更新template的本質&#xff1a; 是render()函數, 用變化之后的數據重新執行render()函數…

Redis:分組與設備在 Redis 中緩存存儲設計

一、緩存存儲結構設計 分組與設備的映射關系&#xff08;使用 Set 結構&#xff09;&#xff1a; 鍵格式&#xff1a;采用 group:{groupId}:devices 的格式作為 Redis 中 Set 的鍵&#xff0c;例如 group:1:devices 就代表了分組 ID 為 1 的分組所關聯的設備集合。值內容&#…

Leetcode 3605. Minimum Stability Factor of Array

Leetcode 3605. Minimum Stability Factor of Array 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3605. Minimum Stability Factor of Array 1. 解題思路 這一題的核心思路是二分法&#xff0c;本質上就是我們給定一個常數kkk&#xff0c;然后考察是否存在一個構造使得能夠…

編譯安裝的Mysql5.7報“Couldn‘t find MySQL server (mysqld_safe)“的原因 筆記250709

編譯安裝的Mysql5.7報"Couldn’t find MySQL server (mysqld_safe)"的原因 筆記250709 MySQL 的安裝路徑與配置文件&#xff08;如 my.cnf 或 mysql.server&#xff09;中指定的 basedir 不一致。 mysqld_safe 文件實際位置與系統查找路徑不匹配&#xff08;常見于自…

在 Ubuntu 下配置 oh-my-posh —— 普通用戶 + root 各自使用獨立主題(共享可執行)

&#x1f9e9; 在 Ubuntu 下配置 oh-my-posh —— 普通用戶 root 各自使用獨立主題&#xff08;共享可執行&#xff09;? 目標說明普通用戶 使用 tokyonight_storm 主題 root 用戶 使用 1_shell 主題 共用全局路徑下的 oh-my-posh 可執行文件 正確加載 Homebrew 到環境變量中…

Spring Boot 項目中的多數據源配置

關鍵詞&#xff1a;Spring Boot、多數據源配置、MySQL、SQL Server、Oracle、動態切換 ? 摘要 在實際企業級開發中&#xff0c;一個 Spring Boot 項目可能需要連接多個數據庫&#xff0c;比如 MySQL、SQL Server 和 Oracle。不同的業務模塊可能依賴不同的數據源&#xff0c;這…

MATLAB/Simulink電機控制仿真代做 同步異步永磁直驅磁阻雙饋無刷

以下是針對 MATLAB/Simulink 電機控制仿真 的系統性解決方案&#xff0c;涵蓋 同步電機、異步電機、永磁電機、直驅電機、磁阻電機、雙饋電機、無刷直流電機&#xff08;BLDC&#xff09; 的建模與控制策略實現&#xff0c;支持代做服務的技術細節和代碼示例。一、電機建模與仿…

限流算法深度探索:從理論到實踐的生產級避坑指南

凌晨3點&#xff0c;監控警報刺耳地尖叫著。我盯著屏幕上垂直下跌的服務可用性曲線&#xff0c;意識到那個被忽視的限流配置項終于引爆了——每秒1000次的支付請求正像洪水般沖垮我們的系統。這次事故讓我深刻理解&#xff1a;限流不是可選項&#xff0c;而是分布式系統的生存法…

企業級后臺管理系統的困境與飛算 JavaAI 的破局之道

企業級后臺管理系統如 CRM&#xff08;客戶關系管理系統&#xff09;、ERP&#xff08;企業資源計劃系統&#xff09;已成為支撐企業高效運轉的核心骨架。它們如同企業的 “神經中樞”&#xff0c;串聯起客戶數據、財務信息、供應鏈流程等關鍵環節&#xff0c;為決策制定、業務…

快速上手百寶箱搭建知識闖關游戲助手

引言&#xff1a;讓學習更有趣&#xff0c;AI 賦能知識闖關新體驗 1.在信息爆炸的時代&#xff0c;傳統的填鴨式教學方式已難以滿足現代用戶對高效、個性化和趣味化學習的需求。越來越多的學習者傾向于通過互動性強、參與感十足的方式獲取知識。在此背景下&#xff0c;游戲化學…

【YOLOv11-目標檢測】目標檢測數據格式(官方說明)

原文鏈接&#xff1a; https://docs.ultralytics.com/datasets/detect/ 寫在前面 訓練一個魯棒且準確的目標檢測模型需要一個全面的數據集。本文介紹&#xff1a;與Ultralytics YOLO模型兼容的各種數據集格式&#xff0c;并深入解析了它們的結構、使用方法以及如何在不同的格…

yolo8實現目標檢測

?步驟一&#xff1a;安裝 PyTorch&#xff08;M1 專用&#xff09;# 推薦使用官方 MPS 后端&#xff08;Apple Metal 加速&#xff09; pip install torch torchvision torchaudio確認是否使用了 Apple MPS&#xff1a;import torch print(torch.backends.mps.is_available()…

安全管理協議(SMP):配對流程、密鑰生成與防中間人攻擊——藍牙面試核心考點精解

一、SMP 核心知識點高頻考點解析1.1 SMP 在藍牙安全體系中的定位考點&#xff1a;SMP 的功能與協議棧位置解析&#xff1a; SMP&#xff08;Security Manager Protocol&#xff0c;安全管理協議&#xff09;是藍牙核心規范中負責設備配對、密鑰生成與安全連接的關鍵協議&#x…

U盤實現——U 盤類特殊命令

文章目錄 U 盤類特殊命令U 盤的命令封包命令階段數據階段狀態階段get max luninquiry(0x12)read format capacities(0x23)read capacity(0x25)mode sense(0x1a)test unit ready(0x00)read(10) 0x28write(10) 0x2aU 盤類特殊命令 U 盤的命令封包 命令階段 命令階段主要由主機通…

深度帖:瀏覽器的事件循環與JS異步

一、瀏覽器進程 早期的瀏覽器是單進程的&#xff0c;所有功能雜糅在一個進程中&#xff1b;現在的瀏覽器是多進程的&#xff0c;包含瀏覽器進程、網絡進程、渲染進程等等&#xff0c;每個進程負責的工作不同。瀏覽器進程&#xff1a;負責界面顯示&#xff08;地址欄、書簽、歷史…

Linux網絡:UDP socket創建流程與簡單通信

本文介紹 UDP 服務端與客戶端 的創建流程&#xff0c;和相關的函數接口 核心流程 創建 socket → socket()填寫服務器地址信息 → sockaddr_in 結構體綁定地址和端口 → bind()接收并響應客戶端數據 → recvfrom() / sendto()socket() #include<sys/so…

windows內核研究(系統調用 1)

WindowsAPI函數的調用過程什么是WindowsApi&#xff1f;Windows API&#xff08;Application Programming Interface&#xff0c;應用程序編程接口&#xff09;是微軟為Windows操作系統提供的一套系統級編程接口&#xff0c;允許開發者與操作系統內核、硬件、系統服務等進行交互…

【前端】異步任務風控驗證與輪詢機制技術方案(通用筆記版)

一、背景場景 在某類生成任務中&#xff0c;例如用戶點擊“執行任務”按鈕后觸發一個較耗時的后端操作&#xff08;如生成報告、渲染圖像、轉碼視頻等&#xff09;&#xff0c;由于其調用了模型、渲染服務或需要較長處理時間&#xff0c;為了防止接口被頻繁惡意調用&#xff0c…

Vim 編輯器常用操作詳解(新手快速上手指南)

&#x1f4bb; Vim 編輯器常用操作詳解&#xff08;新手快速上手指南&#xff09;作者&#xff1a;Lixin 日期&#xff1a;2025-07-09 學習內容&#xff1a;Vim 編輯器基礎 常用快捷鍵 Xshell/Xftp連接 Linux基本操作 學習目標&#xff1a;掌握 Vim 的三種常用模式切換與基本…

OpenGL 生成深度圖與點云

文章目錄 一、簡介二、實現代碼三、實現效果一、簡介 這里基于OpenGL實現對一個Mesh對象深度圖的獲取,思路其實很簡單,直接通過glReadPixels函數獲取整個OpenGL中的深度緩沖數據即可;那么反過來我們如果有了這個深度圖之后,也可以基于每個像素點的深度值,反算出圖像中的深…