服务总线主题为相同的 MessageId 插入了重复的消息记录
Service bus topic inserted duplicate message record for same MessageId
[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 消息。
为什么要为同一个消息 ID 插入多条记录?
如果已经存在,应该避免插入重复记录。
可能的原因可能是
如果应用程序在发送后立即遇到致命错误
一条消息,并且错误地重新启动了应用程序实例
认为先前的消息传递没有发生,随后
send 导致同一条消息在系统中出现两次。
客户端或网络级别的错误也有可能
稍早发生,并且要将已发送的消息提交到
队列,确认未成功返回
客户。这种情况使客户对结果产生怀疑
发送操作。
启用重复检测通过丢弃重复邮件解决了这个问题。
队列和主题的重复检测时间历史默认为30秒,最大值为7天。
重复检测时间历史必须很大才能检测到尽可能多的重复消息。另请注意 window 的大小直接影响队列(和主题)吞吐量。
点击here了解更多信息。
[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 消息。
为什么要为同一个消息 ID 插入多条记录?
如果已经存在,应该避免插入重复记录。
可能的原因可能是
如果应用程序在发送后立即遇到致命错误 一条消息,并且错误地重新启动了应用程序实例 认为先前的消息传递没有发生,随后 send 导致同一条消息在系统中出现两次。
客户端或网络级别的错误也有可能
稍早发生,并且要将已发送的消息提交到
队列,确认未成功返回
客户。这种情况使客户对结果产生怀疑 发送操作。
启用重复检测通过丢弃重复邮件解决了这个问题。
队列和主题的重复检测时间历史默认为30秒,最大值为7天。
重复检测时间历史必须很大才能检测到尽可能多的重复消息。另请注意 window 的大小直接影响队列(和主题)吞吐量。
点击here了解更多信息。