|
@@ -10,29 +10,26 @@ using System.Linq;
|
|
using Azure.Messaging.ServiceBus;
|
|
using Azure.Messaging.ServiceBus;
|
|
using TEAMModelOS.SDK;
|
|
using TEAMModelOS.SDK;
|
|
using TEAMModelOS.SDK.Extension;
|
|
using TEAMModelOS.SDK.Extension;
|
|
|
|
+using System.Collections.Concurrent;
|
|
|
|
|
|
namespace TEAMModelOS.SDK.DI
|
|
namespace TEAMModelOS.SDK.DI
|
|
{
|
|
{
|
|
public static class AzureServiceBusExtensions
|
|
public static class AzureServiceBusExtensions
|
|
{
|
|
{
|
|
-
|
|
|
|
|
|
+ private static ConcurrentDictionary<string, ServiceBusSender> ServiceBusSenders { get; } = new ConcurrentDictionary<string, ServiceBusSender>();
|
|
|
|
+
|
|
/// <summary>
|
|
/// <summary>
|
|
/// 發送信息至對列或主題
|
|
/// 發送信息至對列或主題
|
|
/// </summary>
|
|
/// </summary>
|
|
- /// <param name="pathName">QueueName or TopicName</param>
|
|
|
|
|
|
+ /// <param name="name">QueueName or TopicName</param>
|
|
/// <param name="message">訊息</param>
|
|
/// <param name="message">訊息</param>
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
- public static async Task SendMessageAsync(this ServiceBusClient client, string pathName, ServiceBusMessage message)
|
|
|
|
|
|
+ public static async Task SendMessageAsync(this ServiceBusClient client, string name, ServiceBusMessage message)
|
|
{
|
|
{
|
|
try
|
|
try
|
|
{
|
|
{
|
|
- ServiceBusSender sender = client.CreateSender(pathName);
|
|
|
|
- await sender.SendMessageAsync(message);
|
|
|
|
- if (!sender.IsClosed)
|
|
|
|
- {
|
|
|
|
- await sender.CloseAsync();
|
|
|
|
- await sender.DisposeAsync();
|
|
|
|
- }
|
|
|
|
|
|
+ ServiceBusSender sender = ServiceBusSenders.GetOrAdd(name, x => client.CreateSender(name));
|
|
|
|
+ await sender.SendMessageAsync(message);
|
|
}
|
|
}
|
|
catch
|
|
catch
|
|
{
|
|
{
|
|
@@ -43,25 +40,20 @@ namespace TEAMModelOS.SDK.DI
|
|
/// <summary>
|
|
/// <summary>
|
|
/// 批量發送訊息至對列或主題,如果批量失敗返回False
|
|
/// 批量發送訊息至對列或主題,如果批量失敗返回False
|
|
/// </summary>
|
|
/// </summary>
|
|
- /// <param name="pathName">QueueName or TopicName</param>
|
|
|
|
|
|
+ /// <param name="name">QueueName or TopicName</param>
|
|
/// <param name="messages">批量訊息</param>
|
|
/// <param name="messages">批量訊息</param>
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
- public static async Task<bool> SendBatchMessageAsync(this ServiceBusClient client, string pathName, IList<ServiceBusMessage> messages)
|
|
|
|
|
|
+ public static async Task<bool> SendBatchMessageAsync(this ServiceBusClient client, string name, IList<ServiceBusMessage> messages)
|
|
{
|
|
{
|
|
try
|
|
try
|
|
{
|
|
{
|
|
- ServiceBusSender sender = client.CreateSender(pathName);
|
|
|
|
|
|
+ ServiceBusSender sender = ServiceBusSenders.GetOrAdd(name, x => client.CreateSender(name));
|
|
ServiceBusMessageBatch messageBatch = await sender.CreateMessageBatchAsync();
|
|
ServiceBusMessageBatch messageBatch = await sender.CreateMessageBatchAsync();
|
|
foreach (var msg in messages)
|
|
foreach (var msg in messages)
|
|
{
|
|
{
|
|
if (!messageBatch.TryAddMessage(msg)) return false;
|
|
if (!messageBatch.TryAddMessage(msg)) return false;
|
|
}
|
|
}
|
|
- await sender.SendMessagesAsync(messageBatch);
|
|
|
|
- if (!sender.IsClosed)
|
|
|
|
- {
|
|
|
|
- await sender.CloseAsync();
|
|
|
|
- await sender.DisposeAsync();
|
|
|
|
- }
|
|
|
|
|
|
+ await sender.SendMessagesAsync(messageBatch);
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
catch
|
|
catch
|
|
@@ -73,19 +65,15 @@ namespace TEAMModelOS.SDK.DI
|
|
/// <summary>
|
|
/// <summary>
|
|
/// 發送信息至對列或主題(指定時間排程)
|
|
/// 發送信息至對列或主題(指定時間排程)
|
|
/// </summary>
|
|
/// </summary>
|
|
- /// <param name="pathName">QueueName or TopicName</param>
|
|
|
|
|
|
+ /// <param name="name">QueueName or TopicName</param>
|
|
/// <param name="message">訊息</param>
|
|
/// <param name="message">訊息</param>
|
|
/// <returns>排程訊息的序列號。</returns>
|
|
/// <returns>排程訊息的序列號。</returns>
|
|
- public static async Task<long> SendScheduleMessageAsync(this ServiceBusClient client, string pathName, ServiceBusMessage message, DateTimeOffset scheduleTime)
|
|
|
|
|
|
+ public static async Task<long> SendScheduleMessageAsync(this ServiceBusClient client, string name, ServiceBusMessage message, DateTimeOffset scheduleTime)
|
|
{
|
|
{
|
|
try
|
|
try
|
|
{
|
|
{
|
|
- ServiceBusSender sender = client.CreateSender(pathName);
|
|
|
|
- long num= await sender.ScheduleMessageAsync(message, scheduleTime);
|
|
|
|
- if (!sender.IsClosed) {
|
|
|
|
- await sender.CloseAsync();
|
|
|
|
- await sender.DisposeAsync();
|
|
|
|
- }
|
|
|
|
|
|
+ ServiceBusSender sender = ServiceBusSenders.GetOrAdd(name, x => client.CreateSender(name));
|
|
|
|
+ long num= await sender.ScheduleMessageAsync(message, scheduleTime);
|
|
return num;
|
|
return num;
|
|
}
|
|
}
|
|
catch
|
|
catch
|
|
@@ -97,25 +85,20 @@ namespace TEAMModelOS.SDK.DI
|
|
/// <summary>
|
|
/// <summary>
|
|
/// 批量發送訊息至對列或主題(指定時間排程),如果批量失敗返回False
|
|
/// 批量發送訊息至對列或主題(指定時間排程),如果批量失敗返回False
|
|
/// </summary>
|
|
/// </summary>
|
|
- /// <param name="pathName">QueueName or TopicName</param>
|
|
|
|
|
|
+ /// <param name="name">QueueName or TopicName</param>
|
|
/// <param name="messages">批量訊息</param>
|
|
/// <param name="messages">批量訊息</param>
|
|
/// <returns>排程訊息的序列號</returns>
|
|
/// <returns>排程訊息的序列號</returns>
|
|
- public static async Task<IReadOnlyList<long>> SendScheduleMessagesAsync(this ServiceBusClient client, string pathName, IList<ServiceBusMessage> messages, DateTimeOffset scheduleTime)
|
|
|
|
|
|
+ public static async Task<IReadOnlyList<long>> SendScheduleMessagesAsync(this ServiceBusClient client, string name, IList<ServiceBusMessage> messages, DateTimeOffset scheduleTime)
|
|
{
|
|
{
|
|
try
|
|
try
|
|
{
|
|
{
|
|
- ServiceBusSender sender = client.CreateSender(pathName);
|
|
|
|
- List<ServiceBusMessage> msgs = new List<ServiceBusMessage>() { };
|
|
|
|
|
|
+ ServiceBusSender sender = ServiceBusSenders.GetOrAdd(name, x => client.CreateSender(name));
|
|
|
|
+ List<ServiceBusMessage> msgs = new() { };
|
|
foreach (var msg in messages)
|
|
foreach (var msg in messages)
|
|
{
|
|
{
|
|
msgs.Add(msg);
|
|
msgs.Add(msg);
|
|
}
|
|
}
|
|
- var nums= await sender.ScheduleMessagesAsync(msgs, scheduleTime);
|
|
|
|
- if (!sender.IsClosed)
|
|
|
|
- {
|
|
|
|
- await sender.CloseAsync();
|
|
|
|
- await sender.DisposeAsync();
|
|
|
|
- }
|
|
|
|
|
|
+ var nums= await sender.ScheduleMessagesAsync(msgs, scheduleTime);
|
|
return nums;
|
|
return nums;
|
|
}
|
|
}
|
|
catch
|
|
catch
|
|
@@ -125,7 +108,7 @@ namespace TEAMModelOS.SDK.DI
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- public static async Task<long> SendLeamMessage<T>(this ServiceBusClient client, string TopicName, string id, string pk, long startTime)
|
|
|
|
|
|
+ public static async Task<long> SendLeamMessage<T>(this ServiceBusClient client, string name, string id, string pk, long startTime)
|
|
{
|
|
{
|
|
//微調代碼
|
|
//微調代碼
|
|
var timer = DateTimeOffset.FromUnixTimeMilliseconds(startTime);
|
|
var timer = DateTimeOffset.FromUnixTimeMilliseconds(startTime);
|
|
@@ -146,7 +129,7 @@ namespace TEAMModelOS.SDK.DI
|
|
|
|
|
|
|
|
|
|
//设定开始时间
|
|
//设定开始时间
|
|
- Dictionary<string, object> dict = new Dictionary<string, object>() {
|
|
|
|
|
|
+ Dictionary<string, object> dict = new() {
|
|
{ "name",typeof(T).Name},
|
|
{ "name",typeof(T).Name},
|
|
{ "id",id},
|
|
{ "id",id},
|
|
{ "code",pk}
|
|
{ "code",pk}
|
|
@@ -154,22 +137,17 @@ namespace TEAMModelOS.SDK.DI
|
|
//var msgId = "1";
|
|
//var msgId = "1";
|
|
string messageBody = $"Message {dict}";
|
|
string messageBody = $"Message {dict}";
|
|
|
|
|
|
- long SequenceNumber = await client.SendScheduleMessageAsync(TopicName, new ServiceBusMessage(dict.ToJsonString()), timer);
|
|
|
|
|
|
+ long SequenceNumber = await client.SendScheduleMessageAsync(name, new ServiceBusMessage(dict.ToJsonString()), timer);
|
|
|
|
|
|
return SequenceNumber;
|
|
return SequenceNumber;
|
|
}
|
|
}
|
|
|
|
|
|
- public static async Task cancelMessage(this ServiceBusClient client, string TopicName, long number)
|
|
|
|
|
|
+ public static async Task CancelMessageAsync(this ServiceBusClient client, string name, long number)
|
|
{
|
|
{
|
|
try
|
|
try
|
|
{
|
|
{
|
|
- ServiceBusSender sender = client.CreateSender(TopicName);
|
|
|
|
- await sender.CancelScheduledMessageAsync(number);
|
|
|
|
- if (!sender.IsClosed)
|
|
|
|
- {
|
|
|
|
- await sender.CloseAsync();
|
|
|
|
- await sender.DisposeAsync();
|
|
|
|
- }
|
|
|
|
|
|
+ ServiceBusSender sender = ServiceBusSenders.GetOrAdd(name, x => client.CreateSender(name));
|
|
|
|
+ await sender.CancelScheduledMessageAsync(number);
|
|
}
|
|
}
|
|
catch
|
|
catch
|
|
{
|
|
{
|