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

用Apache Camel测试Localstack AWS

伊裕
2023-03-14

我正在尝试利用localstack来进行本地AWS模拟测试。具体地说,我希望使用Apache CamelS3路由从LocalStackS3桶下载一个文件。然而,我遇到了错误。以下是我采取的步骤...

aws --endpoint-url=http://localhost:4572 s3 mb s3://mytestbucket

然后,我上传了一个测试文件到这个桶里...

aws --endpoint-url=http://localhost:4572 s3 cp docker-compose.yml s3://mytestbucket

两个操作都成功完成。在我的Java代码中,我创建了一个CDI生成器来生成com.amazonaws.services.s3.amazons3客户端对象...

AWSCredentials credentials = new BasicAWSCredentials("XXXXX", "XXXXX");
AWSCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(credentials);
AmazonS3ClientBuilder clientBuilder = AmazonS3ClientBuilder.standard()
                .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("http://localhost:4572", "us-east-1"))
                .withCredentials(credentialsProvider);

AmazonS3 s3Client = clientBuilder.build();  

最后,我创建了一个骆驼路由,旨在将mytestbucket的内容下载到一个本地目录中...

<route id="s3test">
        <from
            uri="aws-s3://arn:aws:s3:::mytestbucket?amazonS3Client=#s3Client&amp;deleteAfterRead=false&amp;maxMessagesPerPoll=25&amp;delay=5000" />
        <log message="S3 consumer fired" loggingLevel="DEBUG" />
        <log message="Sending S3 file to ${in.header.CamelAwsS3Key}..." />
        <to
            uri="file://tmp/camel?fileName=${in.header.CamelAwsS3Key}" />
    </route>

我认为,由于我的AmazonS3客户机特别指出http://localhost:4572是我的endpoint,所以它不应该访问实际的S3服务。情况似乎是这样的,但由于某种原因,它试图访问myTestBucket.localhost就好像它是一个网络主机一样。知道我在这里做错了什么吗,或者为什么这个路由/配置不起作用吗?

共有1个答案

姬俊远
2023-03-14

对于遇到此问题的其他任何人来说,答案在于创建如下所示的客户端:

AWSCredentials credentials = new BasicAWSCredentials("XXXXX", "YYYYY");
AWSCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(credentials);
AmazonS3ClientBuilder clientBuilder = AmazonS3ClientBuilder.standard().withPathStyleAccessEnabled(true)
                    .disableChunkedEncoding()
                    .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(S3_ENDPOINT, "us-east-1"))
                    .withCredentials(credentialsProvider);

关键字是.WithPathStyledAccessEnabled(true)。添加它将正确生成endpointURL。

 类似资料:
  • 我想测试以下骆驼路线。我在网上找到的所有例子都有以文件开头的路由,在我的例子中,我有一个Springbean方法,每隔几分钟就会被调用一次,最后消息被转换并移动到jms以及审计目录。 我对这条路线的写测试毫无头绪。目前我在测试用例中所拥有的是

  • 我正在尝试向异步路由发送消息,但它不起作用。我刚刚在github上创建了一个项目来模拟这个问题

  • 我正在使用apache camel cxf开发一个Web服务(肥皂),我遇到了这个错误。 Java . lang . illegalargumentexception:Part { http://blue print . camel . ngt . TN/}返回的类型应为[ltn . ngt . camel . blue print . WB _ subscriptions;,而不是org . A

  • 我有一个restendpoint示例。org,返回表单的json响应 我的路线是这样的 我读过关于轮询消费者的内容,但找不到如何继续轮询endpoint的示例,直到它返回“success”响应。 是否应该使用轮询消费者?如果是这样的话,可以举一个与我的案例相关的例子。用于轮询restendpoint的任何其他资源都非常有用。

  • 英文原文:http://emberjs.com/guides/testing/testing-user-interaction/ 几乎所有的测试都有访问路由的一种固有模式,就是与页面进行交互(通过助手),然后检测期待的改变是否在DOM中发生。 例如: 1 2 3 4 5 6 test('root lists first page of posts', function(){ visit('/

  • 我试图在聚合器完成后获得一个回复,但是我得到一个异常,我没有指定任何聚合器子项,但是当我指定一个。to()endpoint我没有收到聚合结果。。。这可能吗? 控制器: 聚合器:

  • 问题内容: 我正在使用 “ go test -v ”运行一堆单元测试。我想用delve调试它们。当我尝试运行调试器时,出现 “无法调试非主程序包” 错误。因此,如何使用delve调试器调试单元测试? 问题答案: 用途: 您还可以通过选择要运行的测试(就像)。 在内部,这与Flimzy的答案相同(它使用编译测试二进制文件),但更加精简,不会留下.test文件供您清理。

  • 主要内容:测试套件测试用例是一组条件,测试人员根据这些条件确定软件应用程序是否按照客户的要求工作。测试用例设计包括前提条件,用例名称,输入条件和预期结果。测试用例是第一级操作,源自测试场景。 测试用例提供有关测试策略,测试过程,前提条件和预期输出的详细信息。这些在测试过程中执行,以检查软件应用程序是否正在执行它是否已开发的任务。 编写测试用例是一次性尝试,可以在回归测试时使用。 测试用例通过将缺陷与测试用例ID相关