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
版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。
Azure Service Bus(三)在 .NET Core Web 应用程序发送ServiceBus Queue的更多相关文章
- 如何在ASP.NET Core中使用Azure Service Bus Queue
原文:USING AZURE SERVICE BUS QUEUES WITH ASP.NET CORE SERVICES 作者:damienbod 译文:如何在ASP.NET Core中使用Azure ...
- Azure Service Bus(二)在NET Core 控制台中如何操作 Service Bus Queue
一,引言 上一篇讲到关于 Azure ServiceBus 的一些概念,讲到 Azure Service Bus(服务总线),其实也叫 "云消息服务",是微软在Azure 上提供的 ...
- Azure Service Bus 中的身份验证方式 Shared Access Signature
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- Windows Azure Service Bus (2) 队列(Queue)入门
<Windows Azure Platform 系列文章目录> Service Bus 队列(Queue) Service Bus的Queue非常适合分布式应用.当使用Service Bu ...
- Windows Azure Service Bus (3) 队列(Queue) 使用VS2013开发Service Bus Queue
<Windows Azure Platform 系列文章目录> 在之前的Azure Service Bus中,我们已经介绍了Service Bus 队列(Queue)的基本概念. 在本章中 ...
- Windows Azure Service Bus (6) 中继(Relay On) 使用VS2013开发Service Bus Relay On
<Windows Azure Platform 系列文章目录> 注意:本文介绍的是国内由世纪互联运维的Windows Azure服务. 项目文件请在这里下载. 我们在使用Azure平台的时 ...
- Azure Terraform(八)利用Azure DevOps 实现Infra资源和.NET CORE Web 应用程序的持续集成、持续部署
一,引言 上一篇讲解到利用 Azure DevOps 将整个 Azure Web App,Azure Traffic Manager profile,Azure Storage Account,Azu ...
- Windows Azure Service Bus (4) Service Bus Queue和Storage Queue的区别
<Windows Azure Platform 系列文章目录> 熟悉笔者文章的读者都了解,Azure提供两种不同方式的Queue消息队列: 1.Azure Storage Queue 具体 ...
- 阿里云ONS而微软Azure Service Bus体系结构和功能比较
阿里云ONS而微软Azure Service bus体系结构和功能比较 版权所有所有,转载请注明出处http://blog.csdn.net/yangzhenping.谢谢! 阿里云的开放消息服务: ...
随机推荐
- redis集群管理--sentinel
什么是sentinel? Sentinel(哨兵)是用于监控redis集群中Master状态的工具,是Redis 的高可用性解决方案,sentinel哨兵模式已经被集成在redis2.4之后的版本中. ...
- 第15.37节 PyQt(Python+Qt)入门学习:containers容器类部件QMdiArea多文档界面部件详解及编程开发案例
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 老猿在前期学习PyQt相关知识时,对每个组件的属性及方法都研 ...
- MySQL必知必会详细总结
一.检索数据 1.检索单个列:SELECT prod_name FROM products; 2.检索多个列:SELECT prod_id,prod_name,prod_price FROM prod ...
- springboot 导出xlsx文件
@Override public String downModelXlsFile(SxSourceReq param, HttpServletResponse response) { //设置响应编码 ...
- CRT, lucas及其扩展形式
CRT, lucas及其扩展形式 exgcd int exgcd(int a, int b, int &x, int &y) { if (b == 0) return a, x = 1 ...
- 零基础的Java小白如何准备初级开发的面试
对于各位Java程序员来说,只要能有实践的机会,哪怕工资再低,公司情况再一般,只要自己上心努力,就可能在短时间内快速提升,甚至在工作2年后进大厂都有希望,因为项目里真实的开发实践环境是平时学习不能模拟 ...
- python写几个排序算法
def maopao(data: list): """ 两两比较 :param data: :return: """ length = le ...
- 从零开始学生信-orthofinder的安装和使用-基因家族分析
[环境变量]注释掉conda3,source ~/.bashrc conda install orthofinder # 若在上一章之后没有重启的同学请重启后操作. # 由于是刚开始搭建,这里没有给o ...
- SQL注入 (一)
一.手工注入 注入点检测 识别方法:通过在url栏输入'.and 1=1.or 1=1.and sleep(1),如果出现报错,或者页面不一致,则可能存在注入点. 注入类型:整数型.字符型.搜索型.B ...
- Day9 python高级特性-- 列表生成式 List Comprehensions
Python内置的非常简单却强大的可以用来创建list的生成式. 私理解为,就是for循环出来的结果搞成个list~~~~ 要生成顺序增量list可以使用list(range(x,y))来 ...