Сервисная шина - PullRequest
       29

Сервисная шина

0 голосов
/ 19 апреля 2019

Я использую архитектуру очереди сообщений в Azure через служебную шину. Иногда, когда я пытаюсь отправить сообщение в очередь, это не удается. Вот ошибка, которую я получаю:

Иногда я получаю это сообщение

Message:Can't create session when the connection is closing. 

В другой раз я получаю это сообщение

Message:Cannot access a disposed object.
Object name: 'FaultTolerantAmqpObject`1'. 

Имейте в виду, что это не происходит все время. Иногда я создаю тысячи сообщений для сервисной шины. Я отправляю асинхронную задачу для каждого сообщения, которое отправляю в очередь

Вот мой код

Task.Run(() => new ServiceBusService().SendQueueMessage(busMessageObject));

Класс ServiceBus

public class ServiceBusService
{ 
static string ServiceBusConnectionString = AzureUtils.SERVICE_BUS_CONNECTIONSTRING;
const string QueueName = "eventqueue";
static IQueueClient queueClient;

   public async Task SendQueueMessage(JObject jObject, DateTime? scheduledEnqueueTimeUtc = null)
        {
            string jsonObject = "";
            string scheduledTime = "";

            if(scheduledEnqueueTimeUtc.HasValue)
            {
                scheduledTime = scheduledEnqueueTimeUtc.Value.ToLongTimeString();
            }

            try
            {
                queueClient = new QueueClient(ServiceBusConnectionString, QueueName);
                var message = new Message(Encoding.UTF8.GetBytes(jObject.ToString()));

                if(scheduledEnqueueTimeUtc.HasValue)
                    message.ScheduledEnqueueTimeUtc = scheduledEnqueueTimeUtc.Value;

                await queueClient.SendAsync(message);
                await queueClient.CloseAsync();
            }
            catch (Exception e)
            {
                Trace.TraceError($"{Tag()} " + e.InnerException + " " + e.Message);
            }
        }
}

1 Ответ

0 голосов
/ 19 апреля 2019

Это потому, что мой QueueClient был статическим, и несколько потоков использовали его и уничтожали. Сделать это не статичным решил мою проблему.

...