【问题标题】:Service bus topic inserted duplicate message record for same MessageId服务总线主题插入了相同 MessageId 的重复消息记录
【发布时间】:2018-06-15 04:50:32
【问题描述】:
[FunctionName("MyProcess")]
public static void Run(BrokeredMessage currentMessage,[ServiceBus("mytopic",
    Connection = "ConnServiceBus")]ICollector<BrokeredMessage> mytopicDemo, TraceWriter log)
{
    string messageBody = currentMessage.GetBody<string>();
    BrokeredMessage brokeredMessage = new BrokeredMessage(result);
    //extracted Id and Name from body using some code for simplicity making it as messageBody.Id and messageBody.Name
    brokeredMessage.Properties.Add("Id", messageBody.Id);    
    brokeredMessage.Properties.Add("Name", messageBody.Name);
    brokeredMessage.MessageId = "ZZ"; // I also tried GUID here messageBody.Id
    mytopicDemo.Add(brokeredMessage);

    ...                     

服务总线无法识别重复的 messageId 消息。

为什么要为同一个messageId插入多条记录?

如果已经存在,应该避免插入重复记录。

【问题讨论】:

  • 可能是一个愚蠢的问题,但主题是否启用了重复检测,您是否会在短时间内陆续发送重复?
  • @Mikhail 我会把这个留给你。这个api我没用过
  • @Mikhail 重复检测已启用,但奇怪的是为什么不能正常工作:( 我创建了新主题只是为了使用相同的重复检测设置进行测试,它可以检测到重复但这个旧主题无法识别重复。
  • @Neo 这个问题在那个老话题上是否可以可靠地重现?还是只发生过一次?会不会是检测到了重复,但同一条消息被处理了两次(由于重试或 smth)?
  • 没有检测到重复..我发送了 2 条具有相同 messageId 的消息,我可以看到这 2 条消息插入到具有相同 MessageId 的主题中,这是不应该发生的。因为我们已经有了带有该 messageId 的消息

标签: c# azure azureservicebus servicebus


【解决方案1】:

可能的原因可能是

  • 如果应用程序在发送后立即遇到致命错误 一条消息,以及错误地重新启动的应用程序实例 认为先前的消息传递没有发生,随后的 send 导致相同的消息在系统中出现两次。

  • 客户端或网络级别的错误也可能
    稍早发生,并将发送的消息提交到
    队列,确认未成功返回到
    客户。这种情况使客户对以下结果产生疑问 发送操作。

启用重复检测通过丢弃重复消息来解决此问题。

队列和主题的重复检测时间历史默认为 30 秒,最大值为 7 天。

重复检测时间历史必须很大,才能检测到与重复消息一样多的消息。另请注意,窗口大小直接影响队列(和主题)吞吐量。

点击here了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    相关资源
    最近更新 更多