【问题标题】:send message to service bus topic向服务总线主题发送消息
【发布时间】: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。我仍然看到同样的问题。

【问题讨论】:

标签: c# azure-functions azureservicebus azure-servicebus-topics


【解决方案1】:

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

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

你没有。当消息发送成功时,表示代理已经收到,并且保证在服务器上。你应该做的是验证消息没有被丢弃或处理而没有注意到。验证这一点的最简单方法是在收集所有消息的主题下创建一个“包罗万象的订阅”,并检查您的消息是否已发送。我不建议在您的开发/测试环境之外这样做,因为这不是您在生产环境中应该做的事情。

【讨论】:

  • 谢谢!您能否提供一个示例代码以在该主题下创建包罗万象的订阅?
  • @user989988 或者您可以禁用订阅者。然后你会看到消息堆积如山,直到你重新启用它们。
  • 谢谢!我禁用了订阅。我注意到该消息没有被添加到主题中。
  • @user989988 如果没有将消息添加到主题并且没有引发异常,那么它要么是主题设置,要么是您的发件人代码已关闭。请在某个地方分享一个复制品。对公开回购保密。
  • 谢谢!这是我的仓库中的代码:github.com/microsoftgraph/group-membership-management/blob/…(第 81 行)
猜你喜欢
  • 1970-01-01
  • 2019-09-18
  • 2021-05-23
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多