在开发过程中模拟亚马逊SQS

85
我对使用Amazon SQS和SimpleDB进行开发非常感兴趣,但我想知道是否有任何开源解决方案可以模仿其功能,供开发之用。我已经接触过Eucalyptus项目(http://open.eucalyptus.com)用于创建类似EC的云。
我在谷歌上没有找到任何相关信息,可能是因为入门成本非常低廉,但您是否知道有类似的东西吗?
7个回答

139

针对SQS,我编写了ElasticMQ,您可以将其嵌入运行(由于使用Scala编写,并在JVM上运行),也可以作为独立应用运行。它具有持久性和内存模式,前者适用于开发,后者适用于测试。


5
我们在本地和单元/集成测试中使用了ElasticMQ,并且它运行得非常完美。这应该是被选中的答案。 - anataliocs
4
确实,这应该是被选中的答案。 - dlock
ElasticMQ 同样可以在 Symfony (PHP) 上很好地工作,同时在本地开发时也要确保在 DSN 环境变量中包含凭据(任何密钥 / 密钥对均可)。 - Rvanlaak

47

如果你需要一个测试替身不仅限于 SQS,你可以尝试 LocalStack

为了模拟 SQS,它在内部使用 ElasticMQ,由 adamw 提到

你可以通过 Docker 启动 LocalStack,例如,它将启动以下服务:

  • ES (Elasticsearch Service)
  • SES
  • Route53
  • CloudFormation
  • CloudWatch
  • SSM

  • 这是一个非常小的学习曲线,但LocalStack可能是这种用例中最好和最完整的选择! - ankush981

    41
    一些Amazon SDK有"mock"模式,它是:
    模拟服务是使用示例代码的另一种方式。该服务不会调用AWS,而是返回一个设置响应,您可以修改以适应自己的需求(XML响应文件位于Mock目录中)。模拟服务使您可以轻松测试应用程序如何处理不同的响应。
    就SQS而言,Perl和PHP SDK似乎都有模拟模式。我知道Amazon RDS的.NET SDK也有模拟模式。
    Java SDK不包含模拟实现:
    客户端模拟实现已被删除。相反,开发人员被鼓励使用更灵活和功能更全面的模拟库,例如EasyMockjMock 如果您将要使用的SDK没有可用的模拟模式,则可能可以创建自己类似的东西,它返回预配置的响应而不是实际访问服务。 在此处查看更多信息

    2
    请看下面关于Java SDK的答案。 - tkotisis

    16

    如果你只需要SQS或SNS,那么这个选项非常完美,而且比LocalStack更快速启动。 - rrhartjr

    11

    关于Java SDK,它不再包含模拟实现:

    客户端模拟实现已经被移除。相反,开发人员应该使用更灵活、功能更全面的模拟库,例如EasyMockjMock


    3
    如果您使用的是.NET或Mono,可以尝试使用Stratosphere。它有本地实现,模拟SimpleDB、SQS和S3。对于SimpleDB的模拟实现,它使用SQLite,对于SQS和S3,它将消息/对象存储在文件系统中。

    1

    如果您需要模拟SNS和SQS,可以查看:Yopa


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接