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

Azure队列行为异常

关冠宇
2023-03-14

我有一个基于PHP的应用程序,它使用Azure队列。我的应用程序有一个cron,每20分钟在我的Web服务器上运行一次,它将多达2000条消息添加到Azure队列存储。它过去把这些消息放在一个队列中,但现在我使用两个不同的队列,或者把消息放在每个队列中。在每条消息添加到队列后,还有十分之一秒的Hibernate期,以避免节流。

我在Azure上有大约40个VM从这个队列中读取,处理每个消息,然后在其中任何消息触发特定事件时更新数据库。它发生在100条消息中。

这些VM有一个最大运行时间为900秒(set_time_limit(900))的PHP脚本,它们每15分钟(900秒)作为cron作业运行一次。

问题是每半小时(有时每小时一次)VM将在几分钟内无法从队列中读取任何内容。消息将是空的。

这是我使用的代码

$listMessagesResult = $queueRestProxy->listMessages($queue_name);
$messages = $listMessagesResult->getQueueMessages();

结果只是一条空消息。我有以下代码来跟踪错误

if (empty($messages)) {
        error_log(print_r($messages, TRUE));
    }

它打印和空数组。正是这在我的错误日志里

Array\n(\n)\n

因为代码大部分时间都在工作,所以我看不出有什么问题。我是这样知道它经常发生的http://i.imgur.com/RE9XtVS.png

Y轴是消息数。X轴是时间。消息计数每分钟进行一次。

每次交替运行添加消息的脚本后的平坦曲线显示问题。如果代码有问题,行为就不会如此不稳定。我不知道哪里出了问题,也不知道哪里出了问题。代码非常直截了当,除了5-10分钟的非活动时间外,大部分时间都有效。

我将感谢在这方面的任何帮助。谢谢你。

共有1个答案

师曦
2023-03-14

在戈拉夫的帮助下,我终于把它敲定了。我已将初始可见性超时设置为10分钟,这就是消息添加到队列后几分钟内不可见的原因。我混淆了“setVisibilityTimeoutInSeconds”配置与消息在队列中重新出现所需的时间(如果消息未被明确删除)。

 类似资料:
  • 我正在实现一个应用程序,该应用程序根据曼哈顿距离查找(x,y)平面中给定位置的最近n个事件。我使用最大优先级队列来存储找到的事件,并使用曼哈顿距离比较器。这个队列应该总是有最大人距离事件作为它的窥视,但是我发现这不会一直发生。我在循环中使用pq.poll()打印了这个队列的结果,我发现队列在删除后没有重新排列,只是有时。 我的比较者: 以主方法打印: 输出: 如您所见,事件不是按降序排列的!然而,

  • 我们的一个队列遇到了一个奇怪的问题(同样是为了生产)。当我试图将消息放入队列时,它会抛出一个异常,简单地声明: 消息似乎确实进入了队列,我可以在管理门户中看到队列长度在增加这一事实就证明了这一点。但是,客户端应用程序没有接收任何消息。 管理门户显示有几个失败的请求,还有几个内部服务器异常;尽管不幸的是,我看不到任何方法来获得关于这些失败请求和错误的更多细节。 我有点不知所措,不知道是什么导致了这种

  • 异步队列区别于 RabbitMQ Kafka 等消息队列,它只提供一种 异步处理 和 异步延时处理 的能力,并 不能 严格地保证消息的持久化和 不支持 完备的 ACK 应答机制。 安装 composer require hyperf/async-queue 配置 配置文件位于 config/autoload/async_queue.php,如文件不存在可自行创建。 暂时只支持 Redis Dri

  • 问题内容: 我只是在尝试找出如何最好地尽快从Azure Service Bus队列中检索消息。 我感到震惊的是,没有任何方法可以正确地订阅通知队列,而我将不得不进行轮询。(除非我错了,在这种情况下文档很糟糕)。 我的轮询工作很长,但每60秒检查一条消息似乎每月需要花费900英镑左右(再次,除非我误解了)。而且,如果我添加一个冗余/秒服务来进行轮询,它会加倍。 所以我想知道最好/最经济的方法是什么。

  • 本文向大家介绍azure-webjobs 队列触发器,包括了azure-webjobs 队列触发器的使用技巧和注意事项,需要的朋友参考一下 示例 一个简单的示例,定义一个由队列消息触发的功能: 它还支持POCO序列化:            

  • 我正在开发我的第一个Azure实现,我已经设置了我的Azure帐户,并且我使用NuGet为我的应用程序安装了正确的DLL和配置。当我将我的WCF客户端设置为指向服务总线队列并运行该方法时,会出现以下异常: 微软。ServiceBus.服务器错误 我的endpoint配置是: 我的行为是: 这个错误消息非常通用,我不确定我应该首先查看哪个位置