两个 java 应用程序如何在 EC2 上的两个实例上进行通信?

How can two java apps communicate on two instances on EC2?

我计划有两个 java 应用程序,每个 运行 在 AWS Ec2 上的一个单独实例上,假设实例 1 上有解析器应用程序,实例 2 上有索引器应用程序。当解析器完成解析文档时,我想将一捆文档发送到索引器实例,以便它可以进行索引。如何实现从app1到app2的通知?我最初的想法是套接字。这样做有更好的想法吗?

直接进程通信是一种方式。不过,管理和扩展它可能更难。

您还可以使用 SQS 或其他消息队列来为其他实例排队工作。通常使用该选项,您会希望将有效负载存储在共享位置(如 S3),因为消息通常有大小限制。

假设您的应用程序允许,使用消息队列允许您添加额外的工作人员。

另一种方法是使用 AWS 简单工作流 (SWF) 服务。这需要您将您的应用程序构建到 SWF 框架中并且它有一点学习曲线,但它会负责跨多个实例分派您的任务并确保每个步骤都通过错误处理和事件日志执行。

我建议先阅读常见问题 http://aws.amazon.com/swf/faqs/ and then working through the developer guide http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/welcome.html

目前支持java、ruby、.net和php。