using Microsoft.Azure.Cosmos.Table; using Microsoft.Azure.Cosmos.Table.Queryable; using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Linq; using Azure.Messaging.ServiceBus; using TEAMModelOS.SDK.Helper.Common.CollectionHelper; namespace TEAMModelOS.SDK.DI { public static class AzureServiceBusExtensions { public static Dictionary topClients { get; set; } = new Dictionary(); /// /// 發送信息至對列或主題 /// /// QueueName or TopicName /// 訊息 /// public static async Task SendMessageAsync(this ServiceBusClient client, string pathName, string message) { try { ServiceBusSender sender = client.CreateSender(pathName); await sender.SendMessageAsync(new ServiceBusMessage(Encoding.UTF8.GetBytes(message))); } catch { throw; } } /// /// 批量發送訊息至對列或主題,如果批量失敗返回False /// /// QueueName or TopicName /// 批量訊息 /// public static async Task SendBatchMessageAsync(this ServiceBusClient client, string pathName, IList messages) { try { ServiceBusSender sender = client.CreateSender(pathName); ServiceBusMessageBatch messageBatch = await sender.CreateMessageBatchAsync(); foreach (var msg in messages) { if (!messageBatch.TryAddMessage(new ServiceBusMessage(Encoding.UTF8.GetBytes(msg)))) return false; } await sender.SendMessagesAsync(messageBatch); return true; } catch { return false; } } /// /// 發送信息至對列或主題(指定時間排程) /// /// QueueName or TopicName /// 訊息 /// 排程訊息的序列號。 public static async Task SendScheduleMessageAsync(this ServiceBusClient client, string pathName, string message, DateTimeOffset scheduleTime) { try { ServiceBusSender sender = client.CreateSender(pathName); return await sender.ScheduleMessageAsync(new ServiceBusMessage(Encoding.UTF8.GetBytes(message)), scheduleTime); } catch { throw; } } /// /// 批量發送訊息至對列或主題(指定時間排程),如果批量失敗返回False /// /// QueueName or TopicName /// 批量訊息 /// 排程訊息的序列號 public static async Task SendScheduleMessagesAsync(this ServiceBusClient client, string pathName, IList messages, DateTimeOffset scheduleTime) { try { ServiceBusSender sender = client.CreateSender(pathName); List msgs = new List() { }; foreach (var msg in messages) { msgs.Add(new ServiceBusMessage(Encoding.UTF8.GetBytes(msg))); } return await sender.ScheduleMessagesAsync(msgs, scheduleTime); } catch { return null; } } } }