MuleSoft - controle de fluxo e transformadores
Controle de fluxo (roteadores)
A principal tarefa do componente Flow Control é pegar o evento Mule de entrada e encaminhá-lo para uma ou mais sequências separadas de componentes. É basicamente rotear o evento de entrada do Mule para outra (s) sequência (s) de componentes. Portanto, também é chamado de Roteadores. Os roteadores Choice e Scatter-Gather são os roteadores mais usados no componente Flow Control.
Roteador Choice
Como o nome sugere, este roteador aplica a lógica DataWeave para escolher uma de duas ou mais rotas. Conforme discutido anteriormente, cada rota é uma sequência separada de processadores de eventos Mule. Podemos definir roteadores de escolha como o roteador que roteia mensagens dinamicamente por meio de um fluxo de acordo com um conjunto de expressões DataWeave usadas para avaliar o conteúdo da mensagem.
Diagrama esquemático do roteador de escolha
O efeito de usar o roteador Choice é como adicionar processamento condicional a um fluxo ou if/then/elsebloco de código na maioria das linguagens de programação. A seguir está o diagrama esquemático de um roteador de escolha, com três opções. Entre eles, um é o roteador padrão.
Roteador Scatter-Gather
Outro processador de evento de roteamento mais usado é Scatter-Gather component. Como o próprio nome indica, ele funciona nos fundamentos de scatters (copiar) e Gather (consolida). Podemos entender seu funcionamento com a ajuda de dois pontos a seguir -
Primeiro, este roteador copia (Scatter) um evento Mule para duas ou mais rotas paralelas. A condição é que cada rota deve ser uma sequência de um ou mais processadores de eventos que é como um subfluxo. Cada rota, neste caso, criará um evento Mule usando um thread separado. Cada evento Mule terá sua própria carga útil, atributos e também variáveis.
Em seguida, este roteador reúne os eventos Mule criados de cada rota e os consolida em um novo evento Mule. Depois disso, ele passa esse evento Mule consolidado para o próximo processador de eventos. Aqui, a condição é que o roteador SG passe um evento Mule consolidado para o próximo processador de evento somente quando todas as rotas forem concluídas com sucesso.
Diagrama Esquemático do Roteador Scatter-Gather
A seguir está o diagrama esquemático de um Roteador Scatter-Gather com quatro processadores de eventos. Ele executa todas as rotas em paralelo e não sequencialmente.
Tratamento de erros por roteador Scatter-Gather
Primeiro, devemos ter conhecimento do tipo de erro que pode ser gerado no componente Scatter-Gather. Qualquer erro pode ser gerado nos processadores de eventos, levando o componente Scatter-Gather a lançar um erro do tipoMule: COMPOSITE_ERROR. Este erro será gerado pelo componente SG somente após cada rota falhar ou ser concluída.
Para lidar com esse tipo de erro, um try scopepode ser usado em cada rota do componente Scatter-Gather. Se o erro for tratado com sucesso portry scope, então a rota será capaz de gerar um evento Mule, com certeza.
Transformadores
Suponha que se quisermos definir ou remover uma parte de qualquer evento Mule, o componente Transformer é a melhor escolha. Os componentes do transformador são dos seguintes tipos -
Remova o transformador variável
Como o nome indica, este componente recebe um nome de variável e remove essa variável do evento Mule.
Configurando a remoção do transformador de variável
A tabela abaixo mostra o nome dos campos e sua descrição a serem considerados durante a configuração do transformador de remoção de variável -
Sr. Não | Campo e Explicação |
---|---|
1 | Display Name (doc:name) Podemos personalizar isso para exibir um nome exclusivo para este componente em nosso fluxo de trabalho do Mule. |
2 | Name (variableName) Ele representa o nome da variável a ser removida. |
Definir transformador de carga útil
Com a ajuda de set-payloadcomponente, podemos atualizar a carga útil, que pode ser uma string literal ou expressão DataWeave, da mensagem. Não é recomendado usar este componente para expressões ou transformações complexas. Pode ser usado para simples comoselections.
A tabela abaixo mostra o nome dos campos e sua descrição a serem considerados ao configurar o transformador de carga útil definido -
Campo | Uso | Explicação |
---|---|---|
Valor (valor) | Obrigatório | O valor arquivado é necessário para definir uma carga útil. Ele aceitará uma string literal ou expressão DataWeave definindo como definir a carga útil. Os exemplos são como “alguma string” |
Tipo Mime (mimeType) | Opcional | É opcional, mas representa o tipo MIME do valor atribuído à carga útil da mensagem. Os exemplos são como texto / simples. |
Codificação (codificação) | Opcional | Também é opcional, mas representa a codificação do valor atribuído à carga útil da mensagem. Os exemplos são como UTF-8. |
Podemos definir uma carga útil por meio do código de configuração XML -
With Static Content - Seguir o código de configuração XML definirá a carga útil usando conteúdo estático -
<set-payload value = "{ 'name' : 'Gaurav', 'Id' : '2510' }"
mimeType = "application/json" encoding = "UTF-8"/>
With Expression Content - Seguir o código de configuração XML definirá a carga útil usando o conteúdo de expressão -
<set-payload value = "#['Hi' ++ ' Today is ' ++ now()]"/>
O exemplo acima anexará a data de hoje com a carga útil da mensagem “Hi”.
Definir transformador de variável
Com a ajuda de set variablecomponente, podemos criar ou atualizar uma variável para armazenar valores que podem ser valores literais simples, como strings, cargas úteis de mensagens ou objetos de atributo, para uso dentro do fluxo do aplicativo Mule. Não é recomendado usar este componente para expressões ou transformações complexas. Pode ser usado para simples comoselections.
Configurando o transformador de variável definida
A tabela abaixo mostra o nome dos campos e sua descrição a serem considerados ao configurar o transformador de carga útil definido -
Campo | Uso | Explicação |
---|---|---|
Nome da variável (nome da variável) | Obrigatório | É um campo obrigatório e representa o nome da variável. Ao fornecer o nome, siga a convenção de nomenclatura, pois ele deve conter números, caracteres e sublinhados. |
Valor (valor) | Obrigatório | O valor arquivado é necessário para definir uma variável. Ele aceitará uma string literal ou expressão DataWeave. |
Tipo Mime (mimeType) | Opcional | É opcional, mas representa o tipo MIME da variável. Os exemplos são como texto / simples. |
Codificação (codificação) | Opcional | Também é opcional, mas representa a codificação da variável. Os exemplos são como ISO 10646 / Unicode (UTF-8). |
Exemplo
O exemplo abaixo definirá a variável para a carga útil da mensagem -
Variable Name = msg_var
Value = payload in Design center and #[payload] in Anypoint Studio
Da mesma forma, o exemplo abaixo definirá a variável para a carga útil da mensagem -
Variable Name = msg_var
Value = attributes in Design center and #[attributes] in Anypoint Studio.