Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[dúvida] Conectando endpoints HTTP (setProperty Vs. setHeader)

Verifiquei no curso, que para armazenagem de parâmetros para posterior inserção em "queries" com valores dinâmicos (por exemplo, um <split> iterando algo com Expression Language ${nome.placeholder}), é encorajado o uso de setProperty ao invés de setHeader, já que este último é utilizado para armazenar dados vinculados à mensagem. Verifiquei com o meu time de trabalho, pois aqui não usamos setProperty, somente o setHeader. O motivo passado é que com o uso do setHeader, ao sair do escopo do <split> (ou qualquer outro tipo de tag com o mesmo comportamento de se criar Exchanges dentro do seu escopo), o Camel remove os valores criados no header para aquele escopo, já o setProperty não, já que este define valores globais para todo o contexto do Camel, deixando "sujeira" para casos em que os valores só deverão ser utilizados no escopo da tag mesmo (no caso do exemplo que estou dando, a tag <split>).

Procede o raciocínio?

4 respostas

Oi Daniel,

Seu raciocínio está correto sim... penso que a melhor forma de pensar (e decidir) onde colocar as informações que devem ser acessadas posteriormente é entender a natureza da informação, ou seja: a informação que você quer setar é um metadado da mensagem? É algo que descreve e/ou está diretamente associado a mensagem em si? Quando minha resposta é sim para estas questões eu uso o header... Por outro lado, se a informação que eu quero recuperar posteriormente é algo referente ao meu fluxo, é algo que eu só preciso "pendurar" pra usar depois eu uso property, saca?

Primeiramente obrigado pelo retorno soreisosantos!

A questão de pendurar a informação para uso posterior, pode ser possível com o uso de strategyRef na tag <split>, associando a um objeto que implemente a interface AggregationStrategy, já que com ele pode-se concatenar os valores dos headers de cada iteração do <split>, permitindo acesso desses valores depois do <split>. Ao menos é essa estratégia que utilizamos aqui no meu trabalho. Por isso refleti a respeito do encorajamento do uso do setProperty.

solução!

Oi Daniel, bacana sua explicação.

Eu gosto de resumir esse assunto em: se for um metadado, uma informação associada a mensagem, utilizo header; ser for uma informação associada ao fluxo em si, utilizo property.

Um ponto que se deve tomar cuidado ao utilizar headers (e que já me pegou algumas vezes) é que, quando você tem um pipeline, orquestrando vários endpoints, processamentos, transformações, etc. há sempre o risco de se perder um header.

No mais, consegui entender bem sua preocupação com o caso do split.

Abs,

Entendido. Na realidade tudo depende da função da informação mesmo. Dependendo do que ele representar, conforme você expôs, usa-se em um ou em outro.

Obrigadão pela atenção Romulo!