一,引言

  在之前上一篇讲解到 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. 第4.8节 三目运算、del和pass语句

    一.三目运算 Python的三目运算与C语言的三目运算非常类似,具体语法如下: 条件为真的赋值表达式   if  条件   else 条件为假的表达式 三目运算实际上就是一种表达式计算,当对应if后面 ...

  2. moviepy音视频剪辑:使用fl_time进行诸如快播、慢播、倒序播放等时间特效处理的原理和可能遇到的坑

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一. ...

  3. 【.Net Core】 使用 Nginx 发布 .Net Core 3.1 项目至LInux(Centos7)。

    前置博客(博客中使用的项目来自于此): [Docker] .Net Core 3.1 webapi 集成EF Code First,使用MySql进行业务操作 .配置swagger (三) 环境:.N ...

  4. 【Docker】 使用Docker 在阿里云 Centos7 部署 MySQL 和 Redis (二)

    系列目录: [Docker] CentOS7 安装 Docker 及其使用方法 ( 一 ) [Docker] 使用Docker 在阿里云 Centos7 部署 MySQL 和 Redis (二) [D ...

  5. Flask学习 url和视图

    因为扫描器的准备使用Flask框架,所以开始恶补Flask和前后端的知识 Flask是一个使用Python编写的轻量级Web应用框架,作者是 Armin Ronacher(他也是 Werkzeug 及 ...

  6. Python接口测试-使用requests模块发送GET请求

    本篇主要记录下使用python的requests模块发送GET请求的实现代码. 向服务器发送get请求:无参数时:r = requests.get(url)带params时:r = requests. ...

  7. 一种不错的 BFF Microservice GraphQL/REST API 层的开发方式

    云原生(Cloud Native)Node JS Express Reactive 微服务模板 (REST/GraphQL) 这个项目提供了完整的基于 Node JS / Typescript 的微服 ...

  8. element ui的el-radio踩坑

    1.html 1 <div class="listPeopleDetail"> 2 <div class="item" v-for=" ...

  9. 《图解TCP/IP》笔记

    OSI参考模型 协议分层 为什么需要分层? 简化网络协议. 每一层只需要衔接上下层的服务. 利于模块化开发. 解耦. 分层的问题 过分模块化.提高数据处理的开销. OSI参考模型 作用及意义 将复杂的 ...

  10. 恋爱话术库撩妹至尊VIP版

    本软件来自互联网,解锁永久至尊VIP 是一款教你撩妹密语软件.和女生聊天没有话题? 不知道怎么逗乐女生? 女生生气了不会哄? 不知道怎么让女生愿意跟你聊下去? 不知道女生对你有没有意思? 遇到不知道怎 ...