Azure 服务总线未收到所有消息(仅约 65%)

azure service bus not receiving all messages (only ~65%)

这是我能找到的最接近的上一个问题:Azure Service Bus Subscription OnMessage not receiving messages

同样的事情也发生在我身上。当我更改主题的名称时,它会再次运行一段时间。然后该服务总线主题再次损坏。只有 65-71% 的消息到达。无助于删除订阅,也无助于删除主题。一段时间后,主题名称似乎被污染了。这真的很糟糕,因为我无法判断主题何时损坏,除了当消息未到达时系统无法正常工作。时不时地用新名称创建一个新主题似乎是一个非常糟糕的解决方案。

我正在通过一个进程中的循环测试它,发送消息,然后在另一个进程中循环,接收和计数。使用新的主题名称,它可以完美运行。而且我知道我只有一个订阅监听器,它是一个窥视锁,需要完成消息。

有人吗?我该如何解决?

更新: 这里有一个陷阱。我已经创建了 1 个订阅并保持与它的连接;创建了 1 个主题,总线重新创建了 10 次,每次发送 100 条消息。没有消息丢失。 我已经创建了 1 个订阅,并且每次重新创建总线并发送 100 条消息时都会创建一个新的订阅客户端。丢失 50% 的消息。 好像主题知道之前的subscriptionclient并且消息处理给两个?

新问题: 我正在努力思考如何处理这个问题。任何人都可以确认重新启动该过程,导致创建具有相同订阅名称的新订阅客户端,将使主题处理第一个和第二个订阅客户端之间的消息,即使第一个不再存在? 由于我试图通过重新启动我的订阅模块来处理故障,即通过检查主题是否存在、订阅是否存在然后创建订阅客户端的步骤,我正在努力理解如何避免上述情况,并且也避免将消息发送给不存在的订阅者..

解决方案建议,atm: 跟踪旧订阅,如果我必须重新启动流程,创建新订阅? 在进程停止和创建新订阅之间留下 window,消息将仅发送到 "dead" 订阅。这些消息将丢失。 但至少之后的任何消息都会被新订阅接收。 伙计..这个问题之前一定已经处理过了。我做的不对。非常感谢这里的一些指导。

解决方案: 这一切都与适合工作的正确工具有关。这种情况需要队列,而不是 Pub/Sub。 一切都解决了。我正在做与上面相同的测试,但是用队列代替,当然,因为它决定了接收消息的客户端,所以以前的(死的)订阅客户端从新订阅客户端获取消息没有问题。一次只有一个队列客户端处于活动状态,因此只有那个可以从队列中取出消息。

解决方案:一切都是关于适合工作的工具。这种情况需要队列,而不是 Pub/Sub。一切都解决了。我正在做与上面相同的测试,但是用队列代替,当然,因为它决定了接收消息的客户端,所以以前的(死的)订阅客户端从新订阅客户端获取消息没有问题。一次只有一个队列客户端处于活动状态,因此只有那个客户端可以从队列中取出消息。