【发布时间】:2021-03-03 20:23:09
【问题描述】:
我有一个 C# 代码向服务总线主题发送消息,如下所示:
public class ServiceBusTopicsRepository : IServiceBusTopicsRepository
{
private TopicClient _topicClient;
public ServiceBusTopicsRepository(string connectionString, string entityPath)
{
_topicClient = new TopicClient(connectionString, entityPath);
}
public async Task AddMessageAsync(SyncJob job)
{
await _topicClient.SendAsync(CreateMessage(job));
}
private Message CreateMessage(SyncJob job)
{
var body = JsonSerializer.Serialize(job);
var message = new Message
{
Body = Encoding.UTF8.GetBytes(body)
};
message.MessageId = "PK_RK";
return message;
}
}
在运行代码时,当它到达行后的断点时:
等待_topicClient.SendAsync(CreateMessage(job));
我在执行代码时看到消息一直没有添加到主题中。
DuplicateDetectionHistoryTimeWindow 为 10 分钟
当我在 12 分钟后尝试发送消息时,我看到新发送的消息立即被忽略并丢弃。查看此文档https://docs.microsoft.com/en-us/azure/service-bus-messaging/duplicate-detection,我看到如果使用在时间窗口(10 分钟)内记录的 MessageId 发送任何新消息,则该消息被报告为已接受(发送操作成功),但新发送的消息是瞬间被忽略掉了。但是,它看起来即使在 10 分钟后也忽略了该消息。
我尝试将 MessageId 更新为“PK_RK”+随机 GUID。我仍然看到同样的问题。
【问题讨论】:
-
订阅是否有过滤器:docs.microsoft.com/en-us/azure/service-bus-messaging/… 另外,是否有应用程序从订阅中消费这些消息?听起来您可能有多个消费者/消费者的多个实例试图锁定同一条消息。如果消费者需要很长时间执行并且消息锁过期,也会出现此消息。看到这个答案:stackoverflow.com/questions/15303711/…
标签: c# azure-functions azureservicebus azure-servicebus-topics