如何从.net核心应用程序向服务总线主题发送消息
Posted
技术标签:
【中文标题】如何从.net核心应用程序向服务总线主题发送消息【英文标题】:How to send a message to service bus topic from .net core application 【发布时间】:2017-09-27 23:43:38 【问题描述】:我使用 .net 核心应用程序创建了 API,该应用程序用于将一组属性发送到 SQL DB,并且还应将一份消息副本发送到 azure 服务总线主题。截至目前 .net 核心不支持服务总线。请分享您的想法。如何使用 .net 核心应用程序将消息发送到服务总线主题?
public class CenterConfigurationsDetails
public Guid Id get; set; = Guid.NewGuid();
public Guid? CenterReferenceId get; set; = Guid.NewGuid();
public int? NoOfClassRooms get; set;
public int? OtherSpaces get; set;
public int? NoOfStudentsPerEncounter get; set;
public int? NoOfStudentsPerComplimentaryClass get; set;
// POST api/centers/configurations
[HttpPost]
public IActionResult Post([FromBody]CenterConfigurationsDetails centerConfigurationsDetails)
if (centerConfigurationsDetails == null)
return BadRequest();
if (_centerConfigurationModelCustomValidator.IsValid(centerConfigurationsDetails, ModelState))
var result = _centerConfigurationService.CreateCenterConfiguration(centerConfigurationsDetails);
return Created($"Request.Scheme://Request.HostRequest.Path", result);
var messages = ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage).ToList();
return BadRequest(messages);
【问题讨论】:
【参考方案1】:使用 .Net Core 发送消息非常容易。它有一个专用的 nuget 包:Microsoft.Azure.ServiceBus。
示例代码如下所示:
public class MessageSender
private const string ServiceBusConnectionString = "Endpoint=sb://bialecki.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[privateKey]";
public async Task Send()
try
var productRating = new ProductRatingUpdateMessage ProductId = 123, RatingSum = 23 ;
var message = new Message(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(productRating)));
var topicClient = new TopicClient(ServiceBusConnectionString, "productRatingUpdates");
await topicClient.SendAsync(message);
catch (Exception e)
Console.WriteLine(e);
有关完整示例,您可以查看我的博客文章:http://www.michalbialecki.com/2017/12/21/sending-a-azure-service-bus-message-in-asp-net-core/
还有一个关于接收消息的:http://www.michalbialecki.com/2018/02/28/receiving-messages-azure-service-bus-net-core/
【讨论】:
【参考方案2】:有一个由 Microsoft 编写的 NET Standard 客户端。试试看。
看到这个 - https://blogs.msdn.microsoft.com/servicebus/2016/12/20/service-bus-net-standard-and-open-source/
还有这个 - https://github.com/azure/azure-service-bus-dotnet
【讨论】:
【参考方案3】:以下是如何使用 .Net Core 向 Azure 服务总线主题发送消息:
不要忘记将Microsoft.Azure.ServiceBus nuget 包添加到您的项目中。
using Microsoft.Azure.ServiceBus;
using Newtonsoft.Json;
using System;
using System.Text;
using System.Threading.Tasks;
namespace MyApplication
class Program
private const string ServiceBusConnectionString = "Endpoint=[SERVICE-BUS-LOCATION-SEE-AZURE-PORTAL];SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[privateKey]";
static void Main(string[] args)
Task.Run(async () =>
await Send(123, "Send this message to the Service Bus.");
);
Console.Read();
public static async Task Send(int id, string messageToSend)
try
var messageObject = new Id = id, Message = messageToSend ;
var message = new Message(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(messageObject)));
var topicClient = new TopicClient(ServiceBusConnectionString, "name-of-your-topic");
await topicClient.SendAsync(message);
catch (Exception ex)
Console.WriteLine(ex.Message);
希望这会有所帮助!
【讨论】:
以上是关于如何从.net核心应用程序向服务总线主题发送消息的主要内容,如果未能解决你的问题,请参考以下文章
使用 azure 逻辑应用程序将消息作为字符串发送到 azure 服务总线
在 Azure 数据工厂中完成活动后,如何向 Azure 服务总线发送消息