这是路线:
from("aws-sqs://myQueue?accessKey=RAW(xxx)&secretKey=RAW(yyy)&deleteAfterRead=false")
.log("Attributes: ${header.CamelAwsSqsAttributes}")
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
Map<String, String> messageAttributes = (Map<String, String>) exchange.getIn().getHeader("CamelAwsSqsAttributes");
...
}
});
.log()
显示空地图以及我是否从处理器打印messageAttributes
。
我还尝试使用标题"CamelAwsSqsMessageAttributes"
代替"CamelAwsSqsAttributes"
,但仍然没有。
我虽然看到AWS
控制台的属性
顺便说一句,我得到了消息体,我使用Camel 2.15
答案 0 :(得分:3)
我想通了,这是一个获取队列属性和消息属性的例子:
@Configuration
@EnableWebSecurity
public class HelloWebSecurityConfiguration
extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}
}
如果您不使用main.bind("sqsAttributeNames", Collections.singletonList("All"));
main.bind("sqsMessageAttributeNames", Collections.singletonList("All"));
,请将这些对象添加到注册表中
然后:
org.apache.camel.main.Main
当然,如果您不想要所有属性,可以将from("aws-sqs://myQueue?accessKey=RAW(xxx)&secretKey=RAW(yyy)&deleteAfterRead=false&attributeNames=#sqsAttributeNames&messageAttributeNames=#sqsMessageAttributeNames")
替换为您需要的属性列表。
答案 1 :(得分:1)
我遇到了同样的问题。当我使用camel-aws 2.16.x时,我的端点配置如下
<!-- You can use this link for bootstrap cdn -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
<!-- Latest compiled and minified JavaScript -->
然后我在spring配置文件中定义了一个String集合
from("aws-sqs://myQueue?...&messageAttributeNames=#sqsMsgAttributeNames")
.to(...)
以上设置工作正常,但自从我升级到camel-aws 2.17.3。它不再有效。正如Camel SQS Component中所述, messageAttributeNames 不再支持字符串集合,它应该是一个字符串,其中的属性用逗号分隔。
注意:包含属性的字符串不应包含任何白色 空间否则camel-aws组件只会读取第一个 属性。我经历了痛苦的调试。此外,设置 属性值为&#34;全部&#34;对我不起作用,没有消息 将读取属性。
以下是我所做的改变,让camel-aws的SqsConsumer再次工作:
@Bean
public Collection<String> sqsMsgAttributeNames() {
return Arrays.asList("Attr1", "Attr2");
}
答案 2 :(得分:0)
这不是骆驼的问题。它可以是aws-sqs
或aws-sqs://myQueue?<other attributes here>&attributeNames=All
库的默认行为。
作为快速解决方案,可以使用此localstack
URL
attributeNames
请记住,与SQS不同,.js
在没有webpack.config.js
参数的情况下可以很好地工作。