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
{
///
/// 發送信息至對列或主題
///
/// QueueName or TopicName
/// 訊息
///
public static async Task SendMessageAsync(this ServiceBusClient client, string pathName, ServiceBusMessage message)
{
try
{
ServiceBusSender sender = client.CreateSender(pathName);
await sender.SendMessageAsync(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(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, ServiceBusMessage message, DateTimeOffset scheduleTime)
{
try
{
ServiceBusSender sender = client.CreateSender(pathName);
return await sender.ScheduleMessageAsync(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(msg);
}
return await sender.ScheduleMessagesAsync(msgs, scheduleTime);
}
catch
{
return null;
}
}
}
}