camel路由将消息发布到主题并从队列

时间:2017-04-13 07:10:54

标签: java spring apache-camel

对于某些测试客户端,我使用模仿本地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

1 个答案:

答案 0 :(得分:2)

No component found with scheme: arn

这表示“arn”不是骆驼可以识别的组件名称。

Camel的url以一个camel组件的名称开头,应首先定义。

例如,如果你连接到activemq,你应该使用一个名字来实现一个JmsComponent或ActiveMQComponent,比如说“amq”,然后你可以在camel uri中连接到“amq:xxxx”。

我从未使用过aws,所以我不能给你非常具体的建议。我可以告诉你的是,你需要实现一个“arn”组件,也许它存在于某个第三方库中,或者你需要编写自己的驼峰组件类。