对于某些测试客户端,我使用模仿本地yopa
的{{1}}库。为了将消息发布到主题然后将其接收到队列,我确实喜欢这个
aws
工作正常。
但是如何使用 AmazonSQS amazonSQSClient = AmazonSQSClientBuilder.standard()
.withCredentials(new AWSCredentialsProvider() {
@Override
public AWSCredentials getCredentials() { return null; }
@Override
public void refresh() { }
})
.withEndpointConfiguration(new EndpointConfiguration("http://localhost:47195", "yopa-local")) // local stub
.build();
AmazonSNS amazonSNSClient = AmazonSNSClientBuilder.standard()
.withCredentials(new AWSCredentialsProvider() {
@Override
public AWSCredentials getCredentials() { return null; }
@Override
public void refresh() { }
})
.withEndpointConfiguration(new EndpointConfiguration("http://localhost:47196", "yopa-local")) // local stub
.build();
amazonSNSClient.publish("arn:aws:sns:yopa-local:000000000000:test-topic-with-subscriptions",
"This is my message");
ReceiveMessageResult message =
amazonSQSClient.receiveMessage("http://localhost:47195/queue/test-subscribed-queue-standard");
System.out.println("Number of recievied messages: " + message.getMessages().get(0));
和apache camel
实现该流程?
当我创建这样的路线时
spring
使用<routeContext id="myRoute" xmlns="http://camel.apache.org/schema/spring">
<route id="publish.route">
<from uri="bean:snsPublisher?method=publish({{sns.topic}}, ${body})"/>
<to uri="arn:aws:sns:yopa-local:000000000000:test-topic-with-subscriptions"/>
<onException redeliveryPolicyRef="redeliveryPolicy">
<exception>java.lang.Exception</exception>
<handled>
<constant>{{camel.handle.exception}}</constant>
</handled>
</onException>
</route>
</routeContext>
bean
publisher
(public class SnsPublisher extends SnsClient implements IPublisher<String> {
@Override
public void publish(String topic, String message) {
try {
PublishResult publishResult = getAmazonSNSClient().publish("arn:aws:sns:yopa-local:000000000000:test-topic-with-subscriptions", message);
} catch (AmazonSNSException exception) {
}
}
}
是提供与前一个示例相同的SnsClient
对象的类。)
即使在应用程序开始时我也会
AmazonSNS
答案 0 :(得分:2)
No component found with scheme: arn
这表示“arn”不是骆驼可以识别的组件名称。
Camel的url以一个camel组件的名称开头,应首先定义。
例如,如果你连接到activemq,你应该使用一个名字来实现一个JmsComponent或ActiveMQComponent,比如说“amq”,然后你可以在camel uri中连接到“amq:xxxx”。
我从未使用过aws,所以我不能给你非常具体的建议。我可以告诉你的是,你需要实现一个“arn”组件,也许它存在于某个第三方库中,或者你需要编写自己的驼峰组件类。