Camel不会检索SQS消息属性

时间:2015-07-23 19:17:56

标签: apache-camel amazon-sqs

这是路线:

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

3 个答案:

答案 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-sqsaws-sqs://myQueue?<other attributes here>&attributeNames=All 库的默认行为。 作为快速解决方案,可以使用此localstack URL

attributeNames

请记住,与SQS不同,.js在没有webpack.config.js参数的情况下可以很好地工作。