一,引言
在之前上一篇講解到 Azure ServiceBus Queue 中,我們實地的演示了在控制台中如何操作ServiceBus Queue ,使用 Azure.Messgae.Service 的依賴包完成 Message 的接收/發送,今天我們繼續探究 ServiceBus Queue,如何利用 Microsoft.Azure.ServiceBus 以來完成消息的發送。
--------------------我是分割線--------------------
Azure ServiceBus 系列:
1,Azure Service Bus(一)入門簡介
2,Azure Service Bus(二)在NET Core 控制台中如何操作 ServiceBus Queue
3,Azure Service Bus(三)在 .NET Core Web 應用程序發送ServiceBus Queue
二,正文
1,創建ServiceBus Queue
Azure Portal 點擊 “create a resource”,輸入 “Service Bus” 搜索,並且進行創建。
Resource group 選擇:“Web_Test_SB_RG”
Namespace name:“cnbateblogweb”
Loaction:“East Asia”
Pricing tier:“Basic”
點擊 “Review + create” 進行創建預校驗。
校驗完成后,點擊 “Create” 進行創建
創建完成后,點擊 “Go to resource” 跳轉到創建好的資源
最后,選擇 “Entities=》Queue”,點擊 “+ Queue” 添加 ServiceBus Queue
創建 ServiceBus Queue 輸入
Name:“cnbateblogweb_queue”
其他參數選擇默認,點擊 “Create” 進行創建
創建完成后,我們可以在列表中查看到剛剛創建的名字叫 “cnbateblogweb_queue” 的 Queue 的信息了
2,.NET Core Web MVC 添加對 ServiceBus Queue 的消息的發送
2.1,創建Web項目,添加對 "ServiceBus Queue“ 的依賴包
接下來就是創建 Web 項目,點擊 “ASP.NET Core Web 應用程序”,並命名為 “Azure.ServiceBus.Web”,我這里選擇的目標框架為 “.NET 5.0”
項目創建完成之后,需要添加 Azure ServiceBus 的引用 “Microsoft.Azure.ServiceBus”
使用程序包管理控制台進行安裝
Install-Package Microsoft.Azure.ServiceBus -Version 5.1.0
2.2,創建 ServiceBusQueueSerivice
我們需要創建 ServiceBusQueueSerivice 負責創建與ServiceBus 連接並且發送信息
IServiceBusQueueService
public interface IServiceBusQueueService { Task SendMessageAsync(Message msg); }
ServiceBusQueueService
public class ServiceBusQueueService : IServiceBusQueueService { private readonly AzureServiceBus.IQueueClient _queueClient; public ServiceBusQueueService(AzureServiceBus.QueueClient queueClient) { _queueClient = queueClient; } public async Task SendMessageAsync(Message msg) { try { // Serialize data model and create message. string messageBody = JsonSerializer.Serialize(msg); // create a message that we can send. UTF-8 encoding is used when providing a string. var message = new AzureServiceBus.Message(Encoding.UTF8.GetBytes(messageBody)); /// send the message await _queueClient.SendAsync(message); } catch (Exception ex) { } } }
2.3,創建 ServiceBusQueueController
通過頁面文本輸入的表單需要提交內容,再將需要發送的Message 發送到 ServiceBus 中
ServiceBusQueueController
public class ServiceBusQueueController : Controller { private IServiceBusQueueService _serviceBusQueueService; public ServiceBusQueueController(IServiceBusQueueService serviceBusQueueService) { _serviceBusQueueService = serviceBusQueueService; } public IActionResult Index(string msg) { ViewBag.Message = string.Empty; if (!string.IsNullOrEmpty(msg)) ViewBag.Message = msg; return View(); } [Route("ServiceBusQueue/Send")] [HttpPost()] public async Task<IActionResult> SendMessage(IFormCollection collection) { var msg = new Message { Id=1, Title = collection["Title"], Content = collection["Content"], CreateTime=DateTime.Now }; await _serviceBusQueueService.SendMessageAsync(msg); return RedirectToAction("Index", "ServiceBusQueue",new {msg= " Success!" }); } }
用戶在頁面上提交需要發送的 Message 的內容
@model Azure.ServiceBus.Web.Models.Message @{ ViewData["Title"] = "ServiceBusQueue Page"; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>@ViewData["Title"]</title> </head> <body> <h4>ServiceBusQueue Add Message:<span class="text-success">@ViewBag.Message</span></h4> <hr /> <div class="row"> <div class="col-md-4"> <form asp-action="Send"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> <label asp-for="Title" class="control-label"></label> <input asp-for="Title" class="form-control" /> <span asp-validation-for="Title" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="Content" class="control-label"></label> <input asp-for="Content" class="form-control" /> <span asp-validation-for="Content" class="text-danger"></span> </div> <div class="form-group"> <input type="submit" value="Send" class="btn btn-primary" /> </div> </form> </div> </div> </body> </html>
2.4,依賴注入 Service,Appsettings 配置等
Startup.cs 的ConfigureService 方法
services.AddSingleton(new Appsettings(Env.ContentRootPath)); services.AddSingleton<AzureServiceBus.QueueClient>(new AzureServiceBus.QueueClient(Appsettings.app("ServiceBus", "PrimaryConnectionString"), Appsettings.app("ServiceBus", "QueueName"))); services.AddSingleton<IServiceBusQueueService, ServiceBusQueueService>();
Appsettings.cs
/// <summary> /// appsettings.json操作類 /// </summary> public class Appsettings { static IConfiguration Configuration { get; set; } static string contentPath { get; set; } public Appsettings(string contentPath) { string Path = "appsettings.json"; //如果你把配置文件 是 根據環境變量來分開了,可以這樣寫 //string Path = $"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json"; //var contentPath = env.ContentRootPath; Configuration = new ConfigurationBuilder() .SetBasePath(contentPath) .Add(new JsonConfigurationSource { Path = Path, Optional = false, ReloadOnChange = true })//這樣的話,可以直接讀目錄里的json文件,而不是 bin 文件夾下的,所以不用修改復制屬性 .Build(); } /// <summary> /// 封裝要操作的字符 /// </summary> /// <param name="sections"></param> /// <returns></returns> public static string app(params string[] sections) { try { var val = string.Empty; for (int i = 0; i < sections.Length; i++) { val += sections[i] + ":"; } return Configuration[val.TrimEnd(':')]; } catch (Exception) { return ""; } } }
appsettings.json
"ServiceBus": { "PrimaryConnectionString": "Endpoint=sb://cnbateblogweb.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=X3O9dsC0c+mir8A7porSEn9S/LoQX9GB0TNCv0W6Ev0=", "QueueName": "CNBATEBLOGWEB_QUEUE" }
最重要的一步不要忘記了,回到Azure Portal 上,復制ServiceBus Queue 的 “Shared access policies”
完整代碼請查看文章底部 github 地址
3,測試-發送Message
F5啟用調試后,輸入 ”http://localhost:5000/ServiceBusQueue“
Title 輸入:”First Message“
Content 輸入:“This is First Message-----Hello World”
點擊 ”Send“ 發送 Message
提示發送 "Messgae Success"
回到 Azure Portal 進行驗證,點擊 ”cnbateblogweb_queue“ 可以看到到“MESSAGE COUNTS=》Active”部分中看到一條消息
選擇 ”Settings=》Service Bus Explorer(preview)“,切換到 ”Peek“ 窺探信息內容
OK,.NET CORE Web 應用程序發送消息到 ServiceBus Queue 演示完成!φ(゜▽゜*)♪
三,結尾
OK,今天的分享到此結束,今天主要創建.NET Core Web 應用程序並且引用 ”Microsoft.Azure.ServiceBus“,通過 ”QueueClient“ 創建與Service Bus的連接發送消息到Azure ServiceBus Queue。本文所分享的內容也存在着很多我自己的一些理解,有理解不到位的,還希望多多包涵,並且指出不足之處
參考資料:服務總線消息傳遞:https://docs.microsoft.com/zh-cn/azure/service-bus-messaging/
github:https://github.com/yunqian44/Azure.ServiceBus.git
作者:Allen
版權:轉載請在文章明顯位置注明作者及出處。如發現錯誤,歡迎批評指正。