zoukankan      html  css  js  c++  java
  • Azure Service Bus(三)在 .NET Core Web 应用程序发送ServiceBus Queue

    一,引言

      在之前上一篇讲解到 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 

    版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。

  • 相关阅读:
    select函数
    ascy_finder|base|cookie 代码测试
    正则表达式之道
    教务系统破解
    jquery API
    test
    如何获取和发送Http请求和相应
    header中ContentDisposition的作用
    Performance Testing 系列
    LINQ
  • 原文地址:https://www.cnblogs.com/AllenMaster/p/14224537.html
Copyright © 2011-2022 走看看