在ASP.NET Core 中使用 .NET Aspire 消息傳遞組件

前言

云原生應用程序通常需要可擴展的消息傳遞解決方案,以提供消息隊列、主題和訂閱等功能。.NET Aspire 組件簡化了連接到各種消息傳遞提供程序(例如 Azure 服務總線)的過程。在本教程中,小編將為大家介紹如何創建一個 ASP.NET Core 應用并將提交的消息將發送到服務總線主題以供訂閱者使用。

環境準備

要使用 .NET Aspire,需要在本地安裝以下軟件:

  • .NET 8.0
  • .NET Aspire 工作負載:
  • 使用 Visual Studio 安裝程序
  • 使用dotnet workload install aspire命令
  • Docker 桌面
  • 集成開發環境 (IDE) 或代碼編輯器,例如:
  • Visual Studio 2022 預覽版 17.9 或更高版本(可選)
  • Visual Studio 代碼(可選)

設置 Azure 服務總線賬戶

az group create -n <your-resource-group-name> -location eastus
az servicebus namespace create -g <your-resource-group-name> --name <your-namespace-name> --location eastus
az servicebus topic create --g <your-resource-group-name> --namespace-name <your-namespace-name> --name notifications
az servicebus topic subscription create --g <your-resource-group-name> --namespace-name <your-namespace-name> --topic-name notifications --name mobile

備注:your-resource-group-name和your-namespace-name替換為自己值即可。

Azure 身份驗證

可以使用無密碼身份驗證或連接字符串來完成此快速入門。無密碼連接使用 Azure Active Directory 和基于角色的訪問控制 (RBAC) 連接到服務總線命名空間。無需擔心代碼、配置文件或安全存儲(例如 Azure Key Vault)中存在硬編碼連接字符串。

除此之外,還可以使用連接字符串連接到服務總線命名空間,但建議在實際應用程序和生產環境中使用無密碼方法。有關更多信息,請閱讀身份驗證和授權或訪問無密碼概述頁面。

創建項目

  1. 在 Visual Studio 頂部,導航到“文件” “新建” “項目”。
  2. 在對話框窗口中,搜索ASP.NET Core并選擇ASP.NET Core Web API。選擇下一步。
  3. 在“配置新項目”屏幕上:
  • 輸入項目名稱AspireMessaging。
  • 將其余值保留為默認值,然后選擇“下一步”。

添加 Worker Service

接下來,將工作線程服務項目添加到解決方案,以檢索和處理發往 Azure 服務總線的消息。

  1. 在解決方案資源管理器中,右鍵單擊頂級AspireMessaging解決方案節點,然后選擇“添加” “新項目”。
  2. 搜索并選擇Worker Service模板,然后選擇Next。
  3. 對于項目名稱,輸入AspireMessaging.Worker并選擇下一步。
  4. 在附加信息屏幕上:
  • 確保選擇.NET 8.0 。
  • 確保選中Enlist in .NET Aspire Orchestration并選擇Create。

Visual Studio 將項目添加到您的解決方案中,并使用新的代碼行更新項目的Program.cs文件:AspireMessaging.AppHost

builder.AddProject<Projects.AspireMessaging_WorkerService>("aspiremessaging.workerservice");

完整的文件結構:

將 .NET Aspire 組件添加到 API

將.NET Aspire Azure 服務總線組件添加到您的AspireMessaging應用程序:

dotnet add package Aspire.Azure.Messaging.ServiceBus --prerelease

在Razor Pages 項目的Program.csAspireMessaging文件中,添加對擴展方法的調用AddAzureServiceBus:

builder.AddAzureServiceBus("serviceBusConnection");

在項目的_appsettings.json文件中AspireMessaging,添加對應的連接信息:

{"ConnectionStrings": {"serviceBusConnection": "Endpoint=sb://{your_namespace}.servicebus.windows.net/;SharedAccessKeyName=accesskeyname;SharedAccessKey=accesskey"}
}

備注:將{your_namespace}替換為自己的服務總線空間的名稱

創建 API 端點

提供一個端點來接收數據并將其發布到服務總線主題并向訂閱者廣播。將以下端點添加到AspireMessaging項目中以向主題發送消息:

app.MapPost("/notify", static async (ServiceBusClient client, string message) =>
{var sender = client.CreateSender("notifications");// Create a batchusing ServiceBusMessageBatch messageBatch =await sender.CreateMessageBatchAsync();if (messageBatch.TryAddMessage(new ServiceBusMessage($"Message {message}")) is false){// If it's too large for the batch.throw new Exception($"The message {message} is too large to fit in the batch.");}// Use the producer client to send the batch of // messages to the Service Bus topic.await sender.SendMessagesAsync(messageBatch);Console.WriteLine($"A message has been published to the topic.");
})

將 .NET Aspire 組件添加到 Worker Service

將.NET Aspire Azure 服務總線組件添加到AspireMessaging.Worker應用程序:

dotnet add package Aspire.Azure.Messaging.ServiceBus --prerelease

在Razor Pages 項目的Program.csAspireMessaging.Worker文件中,添加對擴展方法的調用AddAzureServiceBus:

builder.AddAzureServiceBus("serviceBusConnection");

在項目的_appsettings.json文件中AspireMessaging.Worker,添加對應的連接信息:

{"ConnectionStrings": {"serviceBusConnection": "Endpoint=sb://{your_namespace}.servicebus.windows.net/;SharedAccessKeyName=accesskeyname;SharedAccessKey=accesskey"}
}

備注:將{your_namespace}替換為自己的服務總線空間的名稱

處理來自訂閱者的消息

當新消息放入隊列時messages,工作服務應檢索、處理和刪除該消息。更新Worker.cs類以匹配以下代碼:

public class Worker(ILogger<Worker> logger,ServiceBusClient client) : BackgroundService
{protected override async Task ExecuteAsync(CancellationToken stoppingToken){while (!stoppingToken.IsCancellationRequested){var processor = client.CreateProcessor("notifications","mobile",new ServiceBusProcessorOptions());// add handler to process messagesprocessor.ProcessMessageAsync += MessageHandler;// add handler to process any errorsprocessor.ProcessErrorAsync += ErrorHandler;// start processing await processor.StartProcessingAsync();logger.LogInformation("Wait for a minute and then press any key to end the processing");Console.ReadKey();// stop processinglogger.LogInformation("\nStopping the receiver...");await processor.StopProcessingAsync();logger.LogInformation("Stopped receiving messages");}}async Task MessageHandler(ProcessMessageEventArgs args){string body = args.Message.Body.ToString();logger.LogInformation("Received: {Body} from subscription.", body);// complete the message. messages is deleted from the subscription.await args.CompleteMessageAsync(args.Message);}// handle any errors when receiving messagesTask ErrorHandler(ProcessErrorEventArgs args){logger.LogError(args.Exception, args.Exception.Message);return Task.CompletedTask;}
}

最后:在本地運行并測試應用程序

  1. 按 Visual Studio 頂部的運行按鈕啟動 Aspire 應用程序。.NET Aspire 儀表板應用程序應在瀏覽器中打開。
  2. 在項目頁面的aspireweb行中,單擊Endpoints列中的鏈接以打開 API 的 Swagger UI 頁面。
  3. 在 .NET Aspire 儀表板上,導航到AspireWorkerService項目的日志。
  4. 返回 Swagger UI 頁面,展開/notify端點并選擇Try it out。
  5. 在消息輸入框中輸入測試消息。
  6. 選擇執行以發送測試請求。
  7. 切換回AspireWorkerService日志。看到輸出日志中打印的測試消息。

擴展鏈接:

如何使用 Blazor 框架在前端瀏覽器中導入/導出 Excel XLSX

如何在.NET電子表格應用程序中創建流程圖

如何將實時數據顯示在前端電子表格中

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

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

相關文章

PLC通過RS232轉PROFINET與電子分析天平秤通訊案例

本案例是通過用興達易控的XD-PNR200型RS232轉Profinet網關連接電子分析天平秤與PLC通訊的配置案例&#xff0c;用到設備為西門子S7-1200PLC&#xff0c;RS232轉Profinet網關&#xff0c;電子分析天平秤。 打開博圖&#xff0c;添加PLC&#xff1b;本案例使用的是1200PLC。 添加…

『接口測試干貨』| Newman+Postman接口自動化測試完整過程

『接口測試干貨』| NewmanPostman接口自動化測試完整過程 1 Newman簡介2 如何安裝Newman&#xff1f;2.1 安裝NodeJs2.2 安裝Newman2.2 解決Newman不是內部命令 3 Newman使用3.1 Newman如何運行集合&#xff1f;3.2 如何查看幫助文檔&#xff1f;3.3 環境變量設置3.4 關于全局變…

微信小程序制作

如果你也想搭建一個小程序&#xff0c;但不知道如何入手&#xff0c;那么今天我就教你如何使用第三方制作平臺&#xff0c;在短短三十分鐘內搭建一個小程序。 一、登錄小程序制作平臺 首先&#xff0c;登錄到小程序制作平臺的官方網站或應用程序&#xff0c;進入后臺管理系統。…

【Oracle OCP考試】1z0-082(4)

1.Which two statements are true about the PMON background process? A. It rolls back transactions when a process fails&#xff08;當進程失敗時&#xff0c;它回滾事務&#xff09; B. It registers database services with all local and remote listeners known to…

文章解讀與仿真程序復現思路——電網技術 EI\CSCD\北大核心《考慮5G基站儲能可調度容量的有源配電網協同優化調度方法》

這篇文章的標題涉及到以下關鍵概念&#xff1a; 5G基站&#xff1a; 提到了5G基站&#xff0c;這表明文章的焦點可能是與第五代移動通信技術相關的內容。5G技術對于提高通信速度、降低延遲以及支持大規模連接等方面有顯著的改進&#xff0c;因此對于基站的電力需求和供應可能存…

2023年ESG投資研究報告

第一章 ESG投資概況 1.1 定義 ESG投資&#xff0c;亦稱負責任投資&#xff0c;是一種融合環境&#xff08;Environment&#xff09;、社會&#xff08;Social&#xff09;和治理&#xff08;Governance&#xff09;考量的投資方法&#xff0c;旨在通過綜合這些因素來優化投資…

美國汽車零部件巨頭 AutoZone 遭遇網絡攻擊

Security Affairs 網站披露&#xff0c;美國汽車配件零售商巨頭 AutoZone 稱其成為了 Clop MOVEit 文件傳輸網絡攻擊的受害者&#xff0c;導致大量數據泄露。 AutoZone 是美國最大的汽車零配件售后市場經銷商之一&#xff0c;在美國、墨西哥、波多黎各、巴西和美屬維爾京群島經…

算法-技巧-簡單-只出現一次的數字、多數元素

記錄一下算法題的學習10 只出現一次的數字 leetcode題目&#xff1a;給你一個 非空 整數數組 nums &#xff0c;除了某個元素只出現一次以外&#xff0c;其余每個元素均出現兩次。找出那個只出現了一次的元素。你必須設計并實現線性時間復雜度的算法來解決此問題&#xff0c;且…

「Whale 帷幄」連續入選科技榜單,AGI 沖擊波正在加速行業洗牌

以 AGI 為底座&#xff0c;品牌 MarTech 正在經歷一場前所未有的深度變革。 近日&#xff0c;彎弓研究院發布「中國 MarTech 500 強榜單」&#xff0c;以 2023 中國營銷技術&#xff08;MarTech&#xff09;生態為研究對象&#xff0c;洞察行業現象與未來趨勢。作為品牌數字化…

AMEYA360:蔡司新能源汽車解決方案驅動產業未來

電動化正在重塑中國汽車工業。自中國汽車工業開始發展以來&#xff0c;在電動化和智能化的浪潮推動下&#xff0c;汽車行業從未面臨著如此巨大的變革。得益于中國汽車產業尤其是新能源車過去十余年的激流勇進&#xff0c;消費者對新能源汽車的接受度也在發生轉變。新能源汽車市…

2016年全國碩士研究生入學統一考試管理類專業學位聯考英語(二)試題

Section IUse of English Directions: Read the following text.Choose the best word(s) for each numbered blank and mark A&#xff0c;B,Cor D on the ANSWER SHEET.(10 points)   Happy people work differently.They’re more productive&#xff0c;more creative&am…

前后端性能優化實踐(含Java代碼部分、數據庫部分、React前端部分)

最近的一個大屏報表統計的接口查詢速度很慢&#xff0c;耗時近一分鐘左右&#xff0c;數據量級只是700萬左右&#xff0c;但很慢&#xff0c;最后優化到4秒左右&#xff0c;客戶還能接受&#xff0c;但其實還可以在優化&#xff0c;先這樣吧&#xff0c;簡單記錄下。這次主要優…

App Inventor 2 文本轉數字

App Inventor 2 是弱語言類型&#xff0c;文本和數字之間不用刻意去轉換&#xff0c;之間賦值就可以了。文本賦值給數字變量如下&#xff1a; 運行結果&#xff1a;124 注意&#xff1a;數字變量初始化的時候要給一個數字的初始值&#xff0c;表明它是數字。 如果文本中含有非…

java與c++中的分支語句switch的不同

java中的switch后可用字符串,而C只能用字符和數字 switch(suffix){case "js":contentType"text/javascript";break;case "css":contentType"text/css";break;}c switch (x){case 0:case 1:case 2:rth 3;break;case 3:case 4:case 5:r…

系列三、事務

一、事務 1.1、概述 事務是數據庫操作的基本單元&#xff0c;它是指邏輯上的一組操作&#xff0c;要么都成功&#xff0c;要么都失敗。典型場景&#xff1a;轉賬&#xff0c;例如Jack給Rose轉賬1000元&#xff0c;轉賬成功&#xff1a;Jack賬戶的余額少1000元&#xff0c;Rose…

關于進制的轉化

二進制轉十進制&#xff1a; &#x1f530; 方法一&#xff1a;二進制轉十進制&#xff0c;用各數的碼位與位權的乘積之和&#xff0c;說白了就是用從右到左的每個數去乘以2的冪次方&#xff08;最右邊是0&#xff09;&#xff0c;然后就所有的數相加。 補充&#xff1a;位權是…

<藍橋杯軟件賽>零基礎備賽20周--第7周--棧和二叉樹

報名明年4月藍橋杯軟件賽的同學們&#xff0c;如果你是大一零基礎&#xff0c;目前懵懂中&#xff0c;不知該怎么辦&#xff0c;可以看看本博客系列&#xff1a;備賽20周合集 20周的完整安排請點擊&#xff1a;20周計劃 每周發1個博客&#xff0c;共20周&#xff08;讀者可以按…

VMware共享文件夾不能放mysql的數據

概要 使用VMware搭建了一個虛擬機&#xff0c;準備做數據庫服務器。服務器是linux系統&#xff0c;安裝了mysql和redis。為了數據安全&#xff0c;準備將mysql的數據文件放到共享文件夾中&#xff0c;嘗試多次后都沒成功。問題可能是共享文件夾中的文件的擁有者都是root&#…

MFC所有控件介紹及基本使用

一、前言 本篇文檔介紹了MFC控件的基本使用&#xff0c;同時提供了關于MFC控件使用的工程代碼&#xff0c;程序界面如下圖&#xff0c;有興趣的可以到文檔最后的鏈接處進行下載。 二、控件介紹 2.1 Button &#xff08;按鈕&#xff09; 2.2 CheckBox&#xff08;復選框&am…

【jvm】虛擬機之堆

目錄 一、堆的核心概述二、堆的內存細分&#xff08;按分代收集理論設計&#xff09;2.1 java7及以前2.2 java8及以后 三、堆內存大小3.1 說明3.2 參數設置3.3 默認大小3.4 手動設置3.5 jps3.6 jstat3.7 OutOfMemory舉例 四、年輕代與老年代4.1 說明 五、對象分配過程5.1 說明5…