[英]How to send a message to service bus topic from .net core application
我已經使用 .net 核心應用程序創建了 API,該應用程序用於將一組屬性發送到 SQL DB,並且還應將消息的一個副本發送到 azure 服務總線主題。 截至目前,.net 核心不支持服務總線。 請分享您的想法。 如何使用 .net core 應用程序將消息發送到服務總線主題?
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.Host}{Request.Path}", result);
}
var messages = ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage).ToList();
return BadRequest(messages);
}
使用 .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/
有一個由 Microsoft 編寫的 NET Standard 客戶端。 試試看。
看到這個 - https://blogs.msdn.microsoft.com/servicebus/2016/12/20/service-bus-net-standard-and-open-source/
以下是如何使用 .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);
}
}
}
}
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.