Home > Mobile >  Azure service bus - not seeing messages
Azure service bus - not seeing messages

Time:03-22

I created a simple Azure Service bus (Queue) and a client that is sending message to service bus. Using below code to send message:

using Microsoft.Azure.ServiceBus;
using Microsoft.Extensions.Configuration;

 public async Task SendMessageAsync<T>(T message, string queueName)
        {
            try
            {
                var queueClient = new QueueClient(_config.GetConnectionString("AzureServiceBus"), queueName);
                string messageBody = JsonSerializer.Serialize(message);
                var byteMessage = new Message(Encoding.UTF8.GetBytes(messageBody));
                queueClient.SendAsync(byteMessage);
                Console.WriteLine((message as Employee).FirstName);
            }
            catch (Exception ex)
            {
                var c = ex;
            }
           
        }

Sending message using:

using SenderApp;

Console.WriteLine("Hello, World!");
QueueService service = new QueueService();
for (int i = 0; i < 100; i  )
{
    Employee e = new Employee();
    e.FirstName = "1 "   i.ToString();
    e.LastName = "2 "   i.ToString();
    service.SendMessageAsync<Employee>(e, "employeequeue");
}

When I try to see active messages, There is nothing in the queue:

enter image description here

However I do see some traffic. But the number of message I sent (over 100) is not equal to number of incoming request show (62) at the bottom of the image. I am not sure what is happening to my messages? This defeats the purpose of the queue.

Please guide me why I am not seeing any messages. What is the best way to handle this ?

enter image description here

I am using following nuget packages:

<PackageReference Include="Microsoft.Azure.ServiceBus" Version="5.2.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
    <PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.1" />

CodePudding user response:

A message sent to an Azure Service Bus queue will be delivered to the queue unless operation is failing. In that case, an exception will be thrown. Check the following:

  1. Exception handling doesn't swollow exceptions
  2. Await asynchronous send operations to ensure messages are dispatched
  3. Namespace/queue used for sending is what you use to receive
  4. There are no competing consumers, actively receiving messages from the queue.
  5. Validate TCP ports needed for AMQP are not blocked. If those ports are blocked, you could configure your client to use WebSockets.

CodePudding user response:

So I still dont know what caused this issue. But I realized Microsoft.Azure.ServiceBus package was deprecated and later I started using Azure.Messaging.ServiceBus package to connect to service bus and things started to work.

I used following code to send message to queue:

string connectionString = "Endpoint=sb://test.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=f3f qMYTyVwE18YNl5J6ygJFi30v6J/Smph5HZvyQyE=";
            string queueName = "employeequeue";
            // since ServiceBusClient implements IAsyncDisposable we create it with "await using"
            await using var client = new ServiceBusClient(connectionString);

            // create the sender
            ServiceBusSender sender = client.CreateSender(queueName);

            // create a message that we can send. UTF-8 encoding is used when providing a string.
            ServiceBusMessage message = new ServiceBusMessage("Hello world! "   id);

            // send the message
            await sender.SendMessageAsync(message);

            return "Sent";

Used following code to receive message:

string queueName = "employeequeue";
            // since ServiceBusClient implements IAsyncDisposable we create it with "await using"
            await using var client = new ServiceBusClient(connectionString);
            // create a receiver that we can use to receive and settle the message
            ServiceBusReceiver receiver = client.CreateReceiver(queueName);

            // the received message is a different type as it contains some service set properties
            ServiceBusReceivedMessage receivedMessage = await receiver.ReceiveMessageAsync();

            string body = receivedMessage.Body.ToString();

            // complete the message, thereby deleting it from the service
            await receiver.CompleteMessageAsync(receivedMessage);

More info is available @ https://github.com/Azure/azure-sdk-for-net/blob/Azure.Messaging.ServiceBus_7.7.0/sdk/servicebus/Azure.Messaging.ServiceBus/README.md

  • Related