Search code examples
azure.net-coreservicebusazure-servicebus-queues

What is alternate of ServiceBus MessagingFactory in .Net Core?


While converting my project from .Net framework 4.7 to .Net core 2.1, I'm facing issue with Servicebus MessagingFactory. I don't see any MessagingFactory class in new nuget package Microsoft.Azure.ServiceBus for .Net core.

My .Net framework 4.7 Code

private static readonly string messagingConnectionString = Environment.GetEnvironmentVariable("ServiceBusConnection");

    private static Lazy<MessagingFactory> lazyMessagingFactory = new Lazy<MessagingFactory>(() =>
    {
        return MessagingFactory.CreateFromConnectionString(messagingConnectionString);
    });

    public static MessagingFactory MessagingFactory
    {
        get
        {
            return lazyMessagingFactory.Value;
        }
    }

public static MessagingFactory EventHubMessageFactory
    {
        get
        {
            return lazyEventhubMessagingFactory.Value;
        }
    }

public async Task SendMessageToQueueAsync(string queueName, string message)
    {
        QueueClient queueClient = MessagingFactory.CreateQueueClient(queueName);
        BrokeredMessage brokeredMessage = new BrokeredMessage(new MemoryStream(Encoding.UTF8.GetBytes(message)), true);
        await queueClient.SendAsync(brokeredMessage);
    }

It was a best practices for high performance application, Also I have many queues under single service bus namespace and I push message based on configuration. I don't want to create QueueClient object in every request and don't want to maintain connection string for every queue.

What is alternate of MessagingFactory in .Net Core?


Solution

  • There are major changes when you are migrating .NetFramework code into .Netcore, you can see Guide for migrating to Azure.Messaging.ServiceBus from Microsoft.Azure.ServiceBus

    Example below

    static void Main(string[] args)
        {
            string connectionString = "<connection_string>";
            string queueName = "<queue_name>";
            // since ServiceBusClient implements IAsyncDisposable we create it with "await using"
            var client = new ServiceBusClient(connectionString);
    
            // create the sender
            ServiceBusSender sender = client.CreateSender(queueName);
            for (int i = 0; i < 10; i++)
            {
                // create a message that we can send. UTF-8 encoding is used when providing a string.
                ServiceBusMessage message = new ServiceBusMessage($"Hello world {i}!");
    
                // send the message
                sender.SendMessageAsync(message).GetAwaiter().GetResult();
            
            }
        
        sender.DisposeAsync().GetAwaiter().GetResult();
        client.DisposeAsync().GetAwaiter().GetResult();
       }