当前位置: 首页 > 知识库问答 >
问题:

azure服务总线未接收所有消息(仅为65%)

顾骏祥
2023-03-14

这是我能找到的最接近的前一个问题:Azure Service Bus Subscription OnMessage未接收消息。

同样的事情也发生在我身上。当我改变主题的名称时,它会再次工作一段时间。则该服务总线主题再次损坏。只有65-71%的消息到达。无助于删除子内容,也无助于删除主题。题名似乎过了一段时间不知怎么就被污染了。这是真的真的很糟糕,因为我没有办法告诉什么时候主题是腐败的,除了系统不像它应该的工作,当消息没有到达。偶尔用新名称随意创建一个新主题似乎是一个非常糟糕的解决方案。

更新:这里有个陷阱。我已经创建了1个订阅并维护了与它的连接;创建1个主题,总线重新创建10次,每次发送100条消息。味精没丢。我已经创建了1个订阅,并且每次重新创建总线并发送100个消息时都会创建一个新的subscriptionclient。失去50%的味精。似乎主题已经意识到了前面的订阅客户端,并且消息传递给了这两个客户端?

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

解决方案建议,ATM:跟踪旧的订阅,如果我必须重新启动进程,创建一个新的订阅?在进程关闭和创建新订阅之间留下一个窗口,在此消息只会被抽出到“死的”订阅。这些消息将丢失。但至少之后的任何消息都将被新订阅接收。伙计..这个问题以前肯定处理过。我做得不对。将非常感谢您的指导。

共有1个答案

皇甫展
2023-03-14

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

 类似资料:
  • 参考https://github.com/Azure/azure-service-bus/tree/master/samples/dotnet/gettingstart/microsoft.Azure.servicebus/basicsendreceiveusingtopicsubscriptionclient,我了解Azure服务总线主题的一般工作方式,我的问题更多地是关于它实际上是如何工作的。

  • 我正在使用代码实现Azure服务总线主题,这些主题可以在以下位置找到:https://docs.microsoft.com/en-us/Azure/service-bus-messaging/service-bus-dotnet-how-to-use-topics-subscriptions 我尝试运行订阅者程序的两个实例,它包含以下方法: 但是,这不允许两个订户都接收消息,它接收的消息是两个订户

  • 我希望以批处理模式接收来自Azure ServiceBus主题的消息。 阅读https://docs.microsoft.com/en-us/Azure/Azure-functions/functions-best-practices时指出: 我有一个方法: 这个方法是有效的,但它一次只需要一个消息。 根据Microsoft文档,我可以将其更改为: 注意:主题和订阅已启用“启用批处理操作”设置。

  • 我在Azure中托管了两个云服务辅助角色,一个使用NServiceBus(Azure服务总线传输)消耗消息,另一个生成消息。 昨天,我部署了一个新版本的生产者工作者角色,而队列中仍然有大量消息,因为我们正在处理早上遗留下来的大量消息。当生产者启动时,它似乎已经清空(或者可能重新创建)队列,许多重要的生产消息丢失。这似乎很奇怪,但日志显示,大约在生产者角色启动时,消费者没有处理进一步的消息,我们知道

  • 我正在使用Azure服务总线队列。但是我不能使用“获取所有队列消息(peek Lock):微软内置于api”从队列中获取所有消息。 有没有办法获取所有队列消息? {"$连接":{"值":{"servicebus_1":{"连接ID":"/订阅/c776fex3-6aec-4722-b099-b054c267b240/资源组/Plugin-Resources/提供者/Microsoft.网络/连接/

  • 根据MS文档,从订阅接收消息并不困难。但是,如果我希望我的应用程序在每次发布新消息时都接收一条消息--一个恒定的轮询。因此,使用了SubscriptionClient类的OnMessage()方法。 MS文档说:“...当调用OnMessage时,客户端启动一个内部消息泵,该消息泵不断轮询队列或订阅。该消息泵由发出Receive()调用的无限循环组成。如果调用超时,它发出下一个Receive()调