如何从 .net core 应用程序向服务总线主题发送消息

5

我使用 .net core 应用程序创建了 API,用于将一组属性发送到 SQL 数据库,并且应该向 Azure 服务总线主题发送消息的一个副本。目前 .net core 不支持服务总线。请分享您的想法。如何使用 .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);
    }
3个回答

6

使用.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/


这个 NuGet 包已被弃用。请使用:Azure.Messaging.ServiceBus - Zapnologica
此 NuGet 包已被弃用。请使用:Azure.Messaging.ServiceBus。 - undefined

2

1

以下是如何使用 .Net Core 发送消息到 Azure Service Bus Topic 的步骤:

不要忘记将 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);
            }
        }
    }
}

希望这可以帮助你!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接