代码之家  ›  专栏  ›  技术社区  ›  user989988

验证消息是否已添加到服务总线主题

  •  0
  • user989988  · 技术社区  · 4 年前

    我有一个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;
        }
    }
    

    在运行代码时,当代码到达第行后的断点时:

    等待主题客户。SendAsync(CreateMessage(作业));

    当我执行代码时,我看到消息并没有一直添加到主题中。

    重复检测历史时间窗口为10分钟

    当我在12分钟后尝试发送消息时,我看到新发送的消息立即被忽略和删除。看看这个医生 https://docs.microsoft.com/en-us/azure/service-bus-messaging/duplicate-detection ,我看到,如果使用在时间窗口(10分钟)内记录的MessageId发送任何新消息,消息将报告为已接受(发送操作成功),但新发送的消息将立即被忽略和删除。但是,即使在10分钟后,它也会忽略该消息。

    我尝试将MessageId更新为“PK_RK”+随机GUID。我仍然看到同样的问题。

    0 回复  |  直到 4 年前
        1
  •  3
  •   Sean Feldman    4 年前

    发送代码不太可能出现问题。

    如何更新下面的代码以检查消息是否添加到主题中。

    不需要。当消息成功调度时,意味着代理已接收到它,并且保证它在服务器上。您应该做的是验证消息没有被丢弃或处理,而没有注意到。验证这一点的最简单方法是在收集所有邮件的主题下创建一个“全面订阅”,并检查您的邮件是否已发送。我不建议在您的开发/测试环境之外进行此操作,因为您不应该在生产环境中进行此操作。