一,引言

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

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

Azure Service Bus(三)在 .NET Core Web 应用程序发送ServiceBus Queue的更多相关文章

  1. 如何在ASP.NET Core中使用Azure Service Bus Queue

    原文:USING AZURE SERVICE BUS QUEUES WITH ASP.NET CORE SERVICES 作者:damienbod 译文:如何在ASP.NET Core中使用Azure ...

  2. Azure Service Bus(二)在NET Core 控制台中如何操作 Service Bus Queue

    一,引言 上一篇讲到关于 Azure ServiceBus 的一些概念,讲到 Azure Service Bus(服务总线),其实也叫 "云消息服务",是微软在Azure 上提供的 ...

  3. Azure Service Bus 中的身份验证方式 Shared Access Signature

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  4. Windows Azure Service Bus (2) 队列(Queue)入门

    <Windows Azure Platform 系列文章目录> Service Bus 队列(Queue) Service Bus的Queue非常适合分布式应用.当使用Service Bu ...

  5. Windows Azure Service Bus (3) 队列(Queue) 使用VS2013开发Service Bus Queue

    <Windows Azure Platform 系列文章目录> 在之前的Azure Service Bus中,我们已经介绍了Service Bus 队列(Queue)的基本概念. 在本章中 ...

  6. Windows Azure Service Bus (6) 中继(Relay On) 使用VS2013开发Service Bus Relay On

    <Windows Azure Platform 系列文章目录> 注意:本文介绍的是国内由世纪互联运维的Windows Azure服务. 项目文件请在这里下载. 我们在使用Azure平台的时 ...

  7. Azure Terraform(八)利用Azure DevOps 实现Infra资源和.NET CORE Web 应用程序的持续集成、持续部署

    一,引言 上一篇讲解到利用 Azure DevOps 将整个 Azure Web App,Azure Traffic Manager profile,Azure Storage Account,Azu ...

  8. Windows Azure Service Bus (4) Service Bus Queue和Storage Queue的区别

    <Windows Azure Platform 系列文章目录> 熟悉笔者文章的读者都了解,Azure提供两种不同方式的Queue消息队列: 1.Azure Storage Queue 具体 ...

  9. 阿里云ONS而微软Azure Service Bus体系结构和功能比较

    阿里云ONS而微软Azure Service bus体系结构和功能比较 版权所有所有,转载请注明出处http://blog.csdn.net/yangzhenping.谢谢! 阿里云的开放消息服务: ...

随机推荐

  1. Python中的迭代是什么意思?

    Python中的迭代是指通过重复执行的代码处理相似的数据集的过程,并且本次迭代的处理数据要依赖上一次的结果继续往下做,上一次产生的结果为下一次产生结果的初始状态,如果中途有任何停顿,都不能算是迭代. ...

  2. 第9.7节 Python使用write函数写入文件内容

    一. 语法 write(data) data为要写入的数据,可以为字符串str类型,也可以是bytes类型. 返回值为实际写入的数据数,在写入数据为str类型时,该数据为实际写入的UNIOCODE字符 ...

  3. 问题:PyCharm调试方法Force run to cursor与run to cursor的区别

    Force run to cursor与run to cursor的差别是,后者在执行到光标的代码行前,如果有代码中设置了断点,会在该断点处暂停,等待进一步调试指令,而Force run to cur ...

  4. PyQt学习随笔:Model/View中诸如DisplayRole的数据角色及含义

    在PyQt中,模型可以针对不同的组件(或者组件的不同部分,比如存储数据.界面展示数据.按钮的提示等)提供不同的数据.例如,Qt.DisplayRole用于视图的文本显示.通常来说,模型中的数据项包含一 ...

  5. buucitf-[极客大挑战 2020]Roamphp1-Welcome

    打开靶机,发现什么也没有,因为极客大挑战有hint.txt,里面说尝试换一种请求的方式,bp抓包,然后发送了POST请求,出现了下面的界面 这个还是挺简单的,因为是极客大挑战上的第一波题,关键是这个如 ...

  6. Shell:子shell概念

    Blog:博客园 个人 目录 shell环境 什么是子shell 子shell的分类 shell环境 每个shell进程有一个自己的运行环境,不同的Shell进程有不同的Shell环境.Shell解析 ...

  7. 开发实践丨用小熊派STM32开发板模拟自动售货机

    摘要:本文内容是讲述用小熊派开发板模拟自动售货机,基于论坛提供的工程代码,通过云端开发和设备终端开发,实现终端数据在的华为云平台显示. 本文内容是讲述用小熊派开发板模拟自动售货机,基于论坛提供的工程代 ...

  8. 基于Fisco-Bcos的区块链智能合约-简单案例实践

    一.智能合约介绍 智能合约是指把合同/协议条款以代码的形式电子化地放到区块链网络上.FISCO BCOS平台支持两种智能合约类型:Solidity智能合约与预编译智能合约 Solidity与Java类 ...

  9. 使用MySQL乐观锁解决超卖问题

    在秒杀系统设计中,超卖是一个经典.常见的问题,任何商品都会有数量上限,如何避免成功下订单买到商品的人数不超过商品数量的上限,这是每个抢购活动都要面临的难点. 1 超卖问题描述 在多个用户同时发起对同一 ...

  10. 【GIT】随笔

    GIT下载地址:https://git-scm.com/download/win安装方法:下一步默认路径:C:\Program Files\Git 使用方法:右键桌面->git bash her ...