0

我正在使用连接到分布式后端的 PHP 前端,使用 Amazon SQS 和各种消息类型和消息使用者。我试图想出一种方法来安全地调试这些消费者,因为我们不希望消息处理程序使用新的、未经测试的代码消耗最终用户消息,从而冒着消息丢失或错误处理的风险。

实际的消息队列名称被硬编码为类中的 PHP 常量,因此我的第一个策略是创建两组不同的队列,一组用于生产,另一组用于调试,并将队列名称常量外部化到两个不同的文件中。根据我们的调试条件是否为真,我想包含这些常量定义中的一个或另一个,并将包含文件中的常量分配给当前具有硬编码名称的类常量。

这似乎不起作用,因为常量似乎像 PHP 中的类变量一样,而我试图分配像实例变量一样的值。下一个策略是看看亚马逊方面是否有任何东西可以让我们透明地调试我们的消息消费者,而不会在我们的代码中添加大量黑客,但我看不到任何有利于这一点的东西。我很想知道是否有其他人经历过(理想情况下,解决了这个问题)

4

1 回答 1

2

SQS 没有提供一种方法来检查队列中的消息内容,或者让发送者查看是否有任何消费者未能处理消息。

解决此问题的一种常见方法是按照您的建议设置两组队列,并让生产者将相同的消息发布到两个队列中。这样,您可以针对生产消息流调试代码,而不会影响实际的生产队列。

我建议将使用哪个队列的决定从您的代码中移到配置中,然后将不同的配置文件部署到您的开发箱和生产箱。风险始终是开发框最终会与生产系统通信,因此在所有代码中使用单一一致的方法来配置这些端点的风险要比每次调用时临时进行的风险要小得多一项服务。

我还建议将您的生产和开发队列放在具有不同访问凭证的不同 AWS 账户中。这样,您可以授予您的生产帐户发布到开发帐户队列的权限,但您可以保证您的开发系统无法从生产队列中读取。

于 2013-05-18T08:24:04.430 回答