Azure

Wysyłanie opóźnionych wiadomości Azure Service Bus

Pracując z Service Bus zastanawiałem się, czy można opóźnić wysyłanie/pojawianie się wiadomości na kolejkę Service Bus. Znacznie uprościłoby to architekturę całego rozwiązania i zmniejszyło liczbę wywołań Azure Functions. Otóż można. Wystarczy tylko ustawić propertis ScheduledEnqueueTimeUtc klasy Microsoft.Azure.ServiceBus.Message .

Samo tworzenie przykładowej opóźnionej wiadomości wygląda więc następująco:

string message = "Delayed message";
Message queueMessage = new Message(Encoding.UTF8.GetBytes(message));

// Pojawienie się wiadomości na kolejce za 5 minut:
queueMessage.ScheduledEnqueueTimeUtc = DateTime.UtcNow.AddMinutes(5);

// Pojawienie się wiadomości na kolejce za 30 sekund:<br>
queueMessage.ScheduledEnqueueTimeUtc = DateTime.UtcNow.AddSeconds(30);

Helper

Żeby uprościć pracę stworzyłem małą klasę z helperami do wysyłania wiadomości na Service Bus Queue:

UWAGA
Tutaj mała uwaga: jeżeli chcesz wysłać jedną wiadomość na daną kolejkę te metody sprawdzą się bardzo dobrze. Natomiast w momencie, gdy tych wiadomości wysyłanych na tą samą kolejkę jest więcej dużo lepszym pomysłem jest przekazywanie tej samej instancji QueueClient do każdego wywołania metody I nie zamykanie połączenia po wysłaniu (czyli brak wywołania metody QueueClient.CloseAsync()).

Zostaw odpowiedź

Twój adres email nie zostanie upubliczniony.* Pola wymagane *

This site uses Akismet to reduce spam. Learn how your comment data is processed.