在以前上一篇講解到 Azure ServiceBus Queue 中,咱們實地的演示了在控制檯中如何操做ServiceBus Queue ,使用 Azure.Messgae.Service 的依賴包完成 Message 的接收/發送,今天咱們繼續探究 ServiceBus Queue,如何利用 Microsoft.Azure.ServiceBus 以來完成消息的發送。html
--------------------我是分割線--------------------git
Azure ServiceBus 系列:github
Azure Portal 點擊 「create a resource」,輸入 「Service Bus」 搜索,而且進行建立。web
Resource group 選擇:「Web_Test_SB_RG」json
Namespace name:「cnbateblogweb」windows
Loaction:「East Asia」bash
Pricing tier:「Basic」app
點擊 「Review + create」 進行建立預校驗。框架
校驗完成後,點擊 「Create」 進行建立async
建立完成後,點擊 「Go to resource」 跳轉到建立好的資源
最後,選擇 「Entities=》Queue」,點擊 「+ Queue」 添加 ServiceBus Queue
建立 ServiceBus Queue 輸入
Name:「cnbateblogweb_queue」
其餘參數選擇默認,點擊 「Create」 進行建立
建立完成後,咱們能夠在列表中查看到剛剛建立的名字叫 「cnbateblogweb_queue」 的 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 地址
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
版權:轉載請在文章明顯位置註明做者及出處。如發現錯誤,歡迎批評指正。