【问题标题】:How to send a message to service bus topic from .net core application如何从.net核心应用程序向服务总线主题发送消息
【发布时间】: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.Host}{Request.Path}", result);
        }
        var messages = ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage).ToList();
        return BadRequest(messages);
    }

【问题讨论】:

    标签: c# azure asp.net-core-webapi azure-servicebus-topics


    【解决方案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);
                    }
                }
            }
        }
        

        希望这会有所帮助!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-09-18
          • 2013-03-26
          • 1970-01-01
          • 2021-05-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多