我想利用
localstack
我已经通过输入。。。
aws --endpoint-url=http://localhost:4572 s3 mb s3://mytestbucket
然后,我上传了一个测试文件到这个bucket。。。
aws --endpoint-url=http://localhost:4572 s3 cp docker-compose.yml s3://mytestbucket
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();
最后,我创建了一个Camel路由,用于将mytestbucket的内容下载到本地目录中。。。
<route id="s3test">
<from
uri="aws-s3://arn:aws:s3:::mytestbucket?amazonS3Client=#s3Client&deleteAfterRead=false&maxMessagesPerPoll=25&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>
但是,当我的应用程序启动并尝试运行路由时,会出现以下异常:
创建路由s3test:
路由(s3test)[来自[aws-s3://arn:aws:s3:::mytestbucket?亚马逊。。。
因为无法在执行HTTP请求:mytestbucket.localhost
在
org.jboss.weld.bootstrap.events.AfterDeploymentValidationImpl.fire(AfterDeploymentValidationImpl.java:28)
org.jboss.weld.bootstrap.WeldStartup.validateBeans(WeldStartup.java:499)
在
在org.jboss.as.weld.WeldStartService.start上(WeldStartService.java:97)
在
org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1736)
在
org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1698)
... 6其他原因:org.apache.camel.FailedToCreateRouteException:
创建路由s3test失败:
路由(s3test)[来自[aws-s3://arn:aws:s3:::mytestbucket?亚马逊。。。
因为无法在执行HTTP请求:mytestbucket.localhost
org.apache.camel.impl.RouteService.warmUp(RouteService.java:147)网址
在
org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:3856)
org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:3642)
在
在
org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:209)
在
org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:3253)
在
在
org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:3272)
在
org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:3249)
在
org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
在
在
org.apache.camel.impl.DefaultCamelContext$Proxy$\u WeldClientProxy.start(未知
来源)在
org.apache.camel.cdi.cdicameleextension.afterDeploymentValidation(cdicameleextension.java:425)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在java.lang.reflect.Method.invoke(Method.java:498)上
调用(StaticMethodInjectionPoint.java:95)
在
在
在
org.jboss.weld.event.ExtensionObserverMethodImpl.sendEvent(ExtensionObserverMethodImpl.java:123)
在
在
org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:286)
org.jboss.weld.event.ObserverNotifier.notifySyncObservers(ObserverNotifier.java:285)
在
org.jboss.weld.event.ObserverNotifier.notify(ObserverNotifier.java:273)
org.jboss.weld.event.ObserverNotifier.firevent(ObserverNotifier.java:177)
在
org.jboss.weld.event.ObserverNotifier.firevent(ObserverNotifier.java:171)
在
org.jboss.weld.bootstrap.events.AbstractContainerEvent.fire(AbstractContainerEvent.java:53)
org.jboss.weld.bootstrap.events.AbstractDeploymentContainerEvent.fire(AbstractDeploymentContainerEvent.java:35)
执行HTTP请求:mytestbucket.localhost
在
com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1064)
在
com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:743)
com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:717)
在
在
com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667)
com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649)
在
执行(AmazonHttpClient.java:513)
在
com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4330)
在
com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4277)
在
在
com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:835)
在
在
org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
在
在org.apache.camel.impl.RouteService.warmUp(RouteService.java:145)
... 42其他原因:java.net.UnknownHostException:
java.net.InetAddress.getAllByName0(InetAddress.java:1280)位于
java.net.InetAddress.getAllByName(InetAddress.java:1192)位于
com.amazonaws.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:27)
在
com.amazonaws.http.DelegatingDnsResolver.resolve(DelegatingDnsResolver.java:38)
在
org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:111)
在
连接(poolighttpclientconnectionmanager.java:353)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在com.amazonaws.http.conn.$Proxy246.connect(未知源)上
org.apache.http.impl.execchain.MainClientExec.estureroute(MainClientExec.java:380)
org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
在
org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
在
org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
com.amazonaws.http.apache.client.impl.SdkHttpClient.execute(SdkHttpClient.java:72)
在
在
com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1056)
我以为自从我
AmazonS3
客户明确表示
http://localhost:4572
是我的端点,那么它不应该接触到实际的S3服务。似乎是这样,但出于某种原因,它试图访问
mytestbucket.localhost
好像它是一个网络主机。知道我在这里可能做错什么了吗?或者为什么这个路由/配置不起作用?