任务时间所有方法获取 Azure 服务总线发送批量消息的已完成任务的列表



我在下面编写了一个代码来将批量消息发送到 Azure 服务总线,但中间出现错误,我想知道推送到 Azure 服务总线的 ID 列表。

public async Task ProcessProfile(NIFFUNDbContext dbContext)
{
List<Task> concurrentTasks = new List<Task>();
queueClient = new QueueClient(sbConnectionString, sbQueueName, ReceiveMode.ReceiveAndDelete, RetryPolicy.Default);
List<int> personIds = new List<int>();
for (int i = 0; i < 10; i++)
{
queueClient.OperationTimeout = TimeSpan.FromSeconds(10);
var list = dbContext.TpPerson.Include("TpPersonContactInformation").Take(10000).ToList();
foreach (var item in list)
{
var dfObjectMessage = NIF.FUN.Framework.DAL.MSSQL.Converter.TransformToDFMessage(item, ISDObjectTypeEnum.TpPerson, EntityChangeStateEnum.Added, DateTime.Now);
var message = SB.Converter.ToMessage(dfObjectMessage);
concurrentTasks.Add(queueClient.SendAsync(message));
}
await Task.WhenAll(concurrentTasks);
//await queueClient.CloseAsync();
}
}
var concurrentTasks = new List<Task>();
var succeededMessages = new ConcurrentBag<your entity type>();
var failedMessages = new ConcurrentBag<your entity type>();
for (int i = 0; i < 10; i++) // just for the sake of showing iteration
{
var entity = <your logic of getting entity>;
concurrentTasks.Add(Task.Run(async () =>
{
try
{
var message = <message from your entity>;
await queueClient.SendAsync(message);
succeededMessages.Add(entity);
}
catch
{
failedMessages.Add(entity);
}
}));
}
await Task.WhenAll(concurrentTasks);

您可以利用以下代码片段批量发送消息,这样如果失败,整个批处理都会失败,您不必担心哪条消息失败,这也是批量发送消息的建议方法。

var messagelist = new List<Message>();
messagelist.Add(new Message(Encoding.ASCII.GetBytes("Test1")));
messagelist.Add(new Message(Encoding.ASCII.GetBytes("Test2")));
var sender = new QueueClient("connectionstring","entitypath");
sender.SendAsync(messagelist);

最新更新