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

尝试对quarkus camel awssqs使用者进行编码

怀刚毅
2023-03-14

我正在尝试编写我的第一个小quarkus camel AWSSQS consumer,但我找不到任何(简单或其他)示例开始。

我已经通过quarkus生成了一个骨架应用程序。io网页,我创建了一个路由,仅使用SQS队列中的JSON(创建队列并填充消息,我可以使用“原始”java使用它们)。

它是一个包含JSON测试消息的FIFO队列。

我的routeBuilder类如下:

package sun.java.tester.quarkus.camel.sqs;

import org.apache.camel.builder.RouteBuilder;

/**
 *
 * @author ELMARM
 */
public class MyRouteBuilder  extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        public void configure() throws Exception {
    from("aws2-sqs://JSONTestQ.fifo?accessKey=AKIAYAKVQFZGTCDOR3OP&secretKey=yyyyy&region=us-east-2")
            .log("We have a message! ${body}")
            .to("file:target/output?fileName=tester-message-${date:now:MMDDyy-HHmmss}.json");
    
}

当我启动夸克斯应用程序时,我得到以下错误:

2021-08-23 15:04:06,630ERROR[org.apa.cam.qua.mai.CamelMain Runtime](QUUKUS主线程)启动应用程序失败:org.apache.camel.FailedToCreateRouteExcture:创建路由失败路由1:路由(route1)[from[aws2-sqs://JSONTestQ. firo?因为无法解决endpoint: aws2-sqs://JSONTestQ. firo?AKIAYAKVQFZGTCDOR3OP

此请求的规范字符串应该是POST/

amz sdk调用id:9f2e22b6-3d08-2dc2-e45e-643e84ba6437 amz sdk请求:尝试=1;max=3内容长度:36内容类型:application/x-www-form-urlencoded;字符集=utf-8主机:sqs。美国东部2号。亚马逊。com x-amz-日期:20210823T130405Z

amzsdk调用id;amzsdk请求;内容长度;内容类型;主办x-amz-date 48a38266faf90970d6c7fea9b15e6ba366e5f6397c2970fc893f8a7b5e207bd0'

要签名的字符串应该是“AWS4-HMAC-SHA256 20210823T130405Z 20210823/us-east-2/sqs/AWS4_请求07D49A70F6163CD5D0BBB21D1B3E2A8C1927FEB3EC4DBD7FCBC768F3E994189”(服务:sqs,状态代码:403,请求ID:fe69821c-e9be-5250-b428-db8176b8c0c2,扩展请求ID:null)。阿帕奇。骆驼赖菲尔。路由器。在org上创建路由(routereiger.java:80)。阿帕奇。骆驼impl。DefaultModelReifierFactory。在org上创建路由(DefaultModelReifierFactory.java:49)。阿帕奇。骆驼impl。默认上下文。org上的starTroutedDefinitions(DefaultCamelContext.java:826)。阿帕奇。骆驼impl。默认上下文。org上的starTroutedDefinitions(DefaultCamelContext.java:716)。阿帕奇。骆驼impl。发动机抽象语境。doInit(AbstractCamelContext.java:2756)位于org。阿帕奇。骆驼夸克斯。果心快速上下文。doInit(FastCamelContext.java:158)位于org。阿帕奇。骆驼支持服务基本服务。init(BaseService.java:83)位于org。阿帕奇。骆驼impl。发动机抽象语境。org上的init(AbstractCamelContext.java:2475)。阿帕奇。骆驼支持服务基本服务。在org上启动(BaseService.java:111)。阿帕奇。骆驼impl。发动机抽象语境。从org开始(AbstractCamelContext.java:2494)。阿帕奇。骆驼impl。默认上下文。在org上启动(DefaultCamelContext.java:245)。阿帕奇。骆驼夸克斯。主要的卡梅曼。doStart(CamelMain.java:94)位于org。阿帕奇。骆驼支持服务基本服务。在org上启动(BaseService.java:119)。阿帕奇。骆驼夸克斯。主要的卡梅曼。startEngine(CamelMain.java:139)位于org。阿帕奇。骆驼夸克斯。主要的Camelmain运行时。在org上启动(CamelMainRuntime.java:49)。阿帕奇。骆驼夸克斯。果心骆驼靴预购。在io上启动(CamelBootstrapRecorder.java:45)。夸克斯。部署。步骤。CamelBootstrapProcessor$boot-173480958。在io上部署_0(CamelBootstrapProcessor$boot-173480958.zig:101)。夸克斯。部署。步骤。CamelBootstrapProcessor$boot-173480958。在io上部署(CamelBootstrapProcessor$boot-173480958.zig:40)。夸克斯。跑步者应用程序mpl。io上的doStart(ApplicationImpl.zig:898)。夸克斯。运行时。应用在io上启动(Application.java:101)。夸克斯。运行时。应用程序生命周期管理器。在io上运行(ApplicationLifecycleManager.java:101)。夸克斯。运行时。夸克斯。在io上运行(Quarkus.java:66)。夸克斯。运行时。夸克斯。在io上运行(Quarkus.java:42)。夸克斯。运行时。夸克斯。在io上运行(Quarkus.java:119)。夸克斯。跑步者生成主。java上的main(GeneratedMain.zig:29)。base/jdk。内部的反映NativeMethodAccessorImpl。在java上调用0(本机方法)。base/jdk。内部的反映NativeMethodAccessorImpl。在java上调用(NativeMethodAccessorImpl.java:62)。base/jdk。内部的反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:43)。base/java。朗。反思。方法在io上调用(Method.java:566)。夸克斯。跑步者独自创立StartupActionImpl 1美元。在java上运行(StartupActionImpl.java:98)。base/java。朗。丝线。运行(Thread.java:834)由:org引起。阿帕奇。骆驼ResolveEndpointFailedException:未能解析endpoint:aws2-sqs://JSONTestQ.fifo?accessKey=AKIAYAKVQFZGTCDOR3OP

我已经检查过了,我的accessKey和secretKey都是正确的,因为我的“原始”java程序可以使用这些消息。

我对quarkus非常了解(对camel更是如此),所以任何方向都将非常感激。

当做

艾尔玛

共有2个答案

单于亮
2023-03-14

好的,经过多次尝试和磨难,结果证明密钥在(即a)中有“特殊”字符,因此必须在密钥参数周围加上一个RAW。

所以我的路线现在看起来如下:

from("aws2-sqs://JSONTestQ.fifo?accessKey=AKIAYAKVQFZGTCDOR3OP&secretKey=RAW(xxxx+xxxxx)&region=us-east-2")
            .log("We have a message! ${body}")
            .to("file://target/output?fileName=tester-message-${date:now:MMDDyy-HHmmss}.json");

这就成功了。我现在接收我的消息并将它们存储在一个文件夹中。json文件。

松景铄
2023-03-14

“from”endpointURI方案应该是aws2 sqs。例如:

from("aws-sqs2://JSONTestQ.fifo?region=us-east-2?useDefaultCredentialsProvider")

请参阅留档中的URI格式部分:

https://camel.apache.org/components/3.11.x/aws2-sqs-component.html.

 类似资料:
  • 我尝试在我的活动中注入修改,但我得到了空异常 这是AndroidApplication类

  • 最近,我尝试为akka参与者编写一些单元测试,以测试参与者消息流。我在测试中观察到一些奇怪的行为: 下一个 在我的代码中,我有: 基本上,有时(很少)这样的测试失败(在另一个操作系统上),并且抛出processMessage方法的异常(由于业务逻辑导致的IllegalStateException)。

  • 我在服务器端对JSON进行了编码(使用ESAPI编码器),然后客户机检索bean的字段并进行进一步的处理。 在服务器端 编码的JSON字符串 \x7b\x22name\x22\x3a\x22sameer\x22,\x22company\x22\x3a\x22company\x22,\x22designation\x22\x3a\x22developer\x22\x7d 在客户端

  • 因此,根据本教程中关于介质的内容(https://medium.com/coding-design/writing-better-ajax-8ee4a7fb95f#.d7ymg99mp),我尝试使用延迟数组、ajax请求和jQuery.when方法生成多个ajax请求并从每个请求中获取结果。 这是我正在做的事情的代码 我对如何使用$.when函数以及在哪里可以访问返回到ajax调用的数据感到困惑。

  • 我正在尝试对银行账户进行排序,首先按照姓名的字母顺序进行排序,然后按照账户中的金额从多到少进行排序。不幸的是,CompareTo方法似乎不能正常工作,唯一有效的部分是第二部分,它按金额排序。 银行帐户类 银行帐户测试程序

  • 我正在开发一个使用C作为练习的小型交易机器人。他将首先收到基本信息,如我们的资本和日常股票价值(表示为迭代)。 这是我的专业课: 从最后两个属性可以看出,我使用指数移动平均原理和趋势跟踪算法。 我从报纸上读到过http://www.cis.umac.mo/~fstasp/paper/jetwi2011。pdf(主要在第3页)并希望实现他们与我们共享的伪代码;它是这样的: 到目前为止,我是这样做的: