连接到单个 SQS 的多个 EC2 实例
Multiple EC2 instances connecting to single SQS
我们正在使用 cloudformation 模板创建多个 EC2 实例。我们定义了 Auto scaling 和 ELB。每个 EC2 实例都运行着自己的 Tomcat 服务器和一个 Web 应用程序。我们连接到 SQS 以从此 Web 应用程序提取消息并写入 RDS 数据库。
问题陈述 - 我们不希望两个 EC2 实例从 SQS 中提取相同的消息并写入 RDS。能否请您指导我如何使这个过程更有效率?
你的问题很有道理,请看下面的解释。
组件收到消息后,消息仍在队列中。为了防止出现您描述的情况,Amazon SQS 会使用可见性超时来阻止它们,这是 Amazon SQS 阻止其他使用组件接收和处理该消息的时间段。一旦您的实例处理了一条消息,它应该调用一个从队列中删除消息的命令。如果出于某种原因,实例在可见性超时期间未完成作业,则该消息将再次可用于其他实例。
您可以在此处找到更多信息:
http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html
我们正在使用 cloudformation 模板创建多个 EC2 实例。我们定义了 Auto scaling 和 ELB。每个 EC2 实例都运行着自己的 Tomcat 服务器和一个 Web 应用程序。我们连接到 SQS 以从此 Web 应用程序提取消息并写入 RDS 数据库。
问题陈述 - 我们不希望两个 EC2 实例从 SQS 中提取相同的消息并写入 RDS。能否请您指导我如何使这个过程更有效率?
你的问题很有道理,请看下面的解释。
组件收到消息后,消息仍在队列中。为了防止出现您描述的情况,Amazon SQS 会使用可见性超时来阻止它们,这是 Amazon SQS 阻止其他使用组件接收和处理该消息的时间段。一旦您的实例处理了一条消息,它应该调用一个从队列中删除消息的命令。如果出于某种原因,实例在可见性超时期间未完成作业,则该消息将再次可用于其他实例。
您可以在此处找到更多信息: http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html