Partilhar via


Enviar mensagens relacionadas por ordem através de um comboio sequencial no Azure Logic Apps com Azure Service Bus

Aplica-se a: Azure Logic Apps (Consumo)

Quando precisar de enviar mensagens correlacionadas por uma ordem específica, pode seguir o padrão de comboio sequencial ao utilizar o Azure Logic Apps com o conector Azure Service Bus. As mensagens correlacionadas têm uma propriedade que define a relação entre essas mensagens, como o ID da sessão no Service Bus.

Por exemplo, suponha que tem 10 mensagens para uma sessão chamada "Sessão 1" e que tem 5 mensagens para uma sessão chamada "Sessão 2" que são todas enviadas para a mesma fila do Service Bus. Pode criar uma aplicação lógica que processa mensagens da fila para que todas as mensagens de "Sessão 1" sejam processadas por uma única execução de acionador e todas as mensagens de "Sessão 2" sejam processadas pela próxima execução do acionador.

Padrão de comboio sequencial geral

Este artigo mostra como criar uma aplicação lógica que implementa este padrão com o modelo de sessões Correlated in order delivery using service bus sessions(Correlated in order delivery using service bus sessions ). Este modelo define um fluxo de trabalho de aplicação lógica que começa com o conector do Service Bus Quando uma mensagem é recebida num acionador de fila (peek-lock ), que recebe mensagens de uma fila do Service Bus. Eis os passos de alto nível que esta aplicação lógica executa:

  • Inicialize uma sessão com base numa mensagem que o acionador lê a partir da fila do Service Bus.

  • Leia e processe todas as mensagens da mesma sessão na fila durante a execução do fluxo de trabalho atual.

Para rever o ficheiro JSON deste modelo, consulte GitHub: service-bus-sessions.json.

Para obter mais informações, veja Padrão de comboio sequencial – Padrões de Estrutura da Cloud de Arquitetura do Azure.

Pré-requisitos

Verificar o acesso ao espaço de nomes do Service Bus

Se não tiver a certeza se a sua aplicação lógica tem permissões para aceder ao espaço de nomes do Service Bus, confirme essas permissões.

  1. Inicie sessão no portal do Azure. Localize e selecione o espaço de nomes do Service Bus.

  2. No menu espaço de nomes, em Definições, selecione Políticas de acesso partilhado. Em Afirmações, verifique se tem permissões gerir para esse espaço de nomes.

    Gerir permissões para o espaço de nomes do Service Bus

  3. Agora, obtenha a cadeia de ligação para o espaço de nomes do Service Bus. Pode utilizar esta cadeia mais tarde quando criar uma ligação ao espaço de nomes a partir da sua aplicação lógica.

    1. No painel Políticas de acesso partilhado , em Política, selecione RootManageSharedAccessKey.

    2. Junto à cadeia de ligação principal, selecione o botão copiar. Guarde a cadeia de ligação para utilização posterior.

      Copiar cadeia de ligação do espaço de nomes do Service Bus

    Dica

    Para confirmar se a cadeia de ligação está associada ao espaço de nomes do Service Bus ou a uma entidade de mensagens, como uma fila, procure o EntityPath parâmetro na cadeia de ligação. Se encontrar este parâmetro, a cadeia de ligação destina-se a uma entidade específica e não é a cadeia correta a utilizar com a sua aplicação lógica.

Criar uma aplicação lógica

Nesta secção, vai criar uma aplicação lógica através do modelo Desativar a entrega por encomenda através do modelo de sessões do service bus , que inclui o acionador e as ações para implementar este padrão de fluxo de trabalho. Também pode criar uma ligação ao espaço de nomes do Service Bus e especificar o nome da fila do Service Bus que pretende utilizar.

  1. No portal do Azure, crie uma aplicação lógica em branco. Na home page do Azure, selecione Criar umaAplicação Lógica deIntegração> de recursos>.

  2. Depois de a galeria de modelos aparecer, percorra o vídeo e as secções de acionadores comuns. Na secção Modelos , selecione o modelo, Entrega por encomenda correlacionada com sessões do service bus.

    Selecione o modelo

  3. Quando a caixa de confirmação for apresentada, selecione Utilizar este modelo.

  4. No Estruturador de Aplicações Lógicas, na forma Service Bus , selecione Continuar e, em seguida, selecione o sinal de adição (+) que aparece na forma.

    Selecione

  5. Agora, crie uma ligação do Service Bus ao selecionar qualquer uma das opções:

    • Para utilizar a cadeia de ligação que copiou anteriormente do espaço de nomes do Service Bus, siga estes passos:

      1. Selecione Introduzir manualmente as informações de ligação.

      2. Para Nome da Ligação, forneça um nome para a sua ligação. Para Cadeia de Ligação, cole a cadeia de ligação do espaço de nomes e selecione Criar, por exemplo:

        Introduza o nome da ligação e a cadeia de ligação do Service Bus

        Dica

        Se não tiver esta cadeia de ligação, saiba como localizar e copiar a cadeia de ligação do espaço de nomes do Service Bus.

    • Para selecionar um espaço de nomes do Service Bus na sua subscrição atual do Azure, siga estes passos:

      1. Para Nome da Ligação, forneça um nome para a sua ligação. Para o Espaço de Nomes do Service Bus, selecione o espaço de nomes do Service Bus, por exemplo:

        Introduza o nome da ligação e selecione Espaço de nomes do Service Bus

      2. Quando o painel seguinte for apresentado, selecione a política do Service Bus e selecione Criar.

        Selecione Política do Service Bus e, em seguida,

  6. Quando terminar, selecione Continuar.

    O Estruturador de Aplicações Lógicas mostra agora o modelo Correlated in order delivery using service bus sessions (Correlated in order delivery using service bus sessions ), que contém um fluxo de trabalho pré-preenchido com um acionador e ações, incluindo dois âmbitos que implementam o processamento de erros que seguem o Try-Catch padrão.

Agora, pode saber mais sobre o acionador e as ações no modelo ou avançar para fornecer os valores para o modelo da aplicação lógica.

Resumo do modelo

Segue-se o fluxo de trabalho de nível superior no modelo De entrega por encomenda correlacionado com sessões do service bus quando os detalhes são fechados:

Fluxo de trabalho de nível superior do modelo

Nome Descrição
When a message is received in a queue (peek-lock) Com base na periodicidade especificada, este acionador do Service Bus verifica a fila do Service Bus especificada para obter quaisquer mensagens. Se existir uma mensagem na fila, o acionador é acionado, o que cria e executa uma instância de fluxo de trabalho.

O termo peek-lock significa que o acionador envia um pedido para obter uma mensagem da fila. Se existir uma mensagem, o acionador obtém e bloqueia a mensagem para que não aconteça outro processamento nessa mensagem até que o período de bloqueio expire. Para obter detalhes, inicialize a sessão.

Init isDone Esta ação inicializar variável cria uma variável booleana definida como false e indica quando as seguintes condições são verdadeiras:

- Não existem mais mensagens na sessão disponíveis para leitura.
- O bloqueio de sessão já não precisa de ser renovado para que a instância do fluxo de trabalho atual possa ser concluída.

Para obter detalhes, consulte Inicializar a sessão.

Try Esta ação âmbito contém as ações executadas para processar uma mensagem. Se ocorrer um problema no Try âmbito, a ação âmbito subsequente Catch processa esse problema. Para obter mais informações, consulte o âmbito "Experimentar".
Catch Esta ação âmbito contém as ações que são executadas se ocorrer um problema no âmbito anteriorTry. Para obter mais informações, consulte o âmbito "Catch".

Âmbito "Experimentar"

Eis o fluxo de nível superior na ação de Try âmbito quando os detalhes são fechados:

Fluxo de trabalho de ação de âmbito

Nome Descrição
Send initial message to topic Pode substituir esta ação por qualquer ação que pretenda processar a primeira mensagem da sessão na fila. O ID da sessão especifica a sessão.

Para este modelo, uma ação do Service Bus envia a primeira mensagem para um tópico do Service Bus. Para obter detalhes, consulte Processar a mensagem inicial.

(ramo paralelo) Esta ação de ramo paralelo cria dois caminhos:

- Ramo n.º 1: Continue a processar a mensagem. Para obter mais informações, consulte Branch #1: Complete initial message in queue (Ramo n.º 1: Concluir a mensagem inicial na fila).

- Ramo n.º 2: abandone a mensagem se algo correr mal e solte para recolha por outra execução de acionador. Para obter mais informações, consulte Ramo n.º 2: Abandonar a mensagem inicial da fila.

Ambos os caminhos juntam-se mais tarde na sessão Fechar numa fila e ação com êxito , descrita na linha seguinte.

Close a session in a queue and succeed Esta ação do Service Bus associa-se aos ramos descritos anteriormente e fecha a sessão na fila depois de ocorrer um dos seguintes eventos:

- O fluxo de trabalho termina o processamento de mensagens disponíveis na fila.
- O fluxo de trabalho abandona a mensagem inicial porque ocorreu um problema.

Para obter detalhes, consulte Fechar uma sessão numa fila e ter êxito.

Ramo n.º 1: Concluir a mensagem inicial na fila

Nome Descrição
Complete initial message in queue Esta ação do Service Bus marca uma mensagem obtida com êxito como concluída e remove a mensagem da fila para impedir o reprocessamento. Para obter detalhes, consulte Processar a mensagem inicial.
While there are more messages for the session in the queue Este ciclo Até continuar a receber mensagens enquanto as mensagens existem ou até passar uma hora. Para obter mais informações sobre as ações neste ciclo, consulte Embora existam mais mensagens para a sessão na fila.
Set isDone = true Quando já não existem mensagens, esta ação Definir variável define isDone como true.
Renew session lock until cancelled Este ciclo Até garante que o bloqueio de sessão é mantido por esta aplicação lógica enquanto as mensagens existem ou até passar uma hora. Para obter mais informações sobre as ações neste ciclo, consulte Renovar o bloqueio de sessão até ser cancelado.

Ramo n.º 2: Abandonar a mensagem inicial da fila

Se a ação que processa a primeira mensagem falhar, a ação Service Bus, Abandonar a mensagem inicial da fila, lança a mensagem para que outra instância de fluxo de trabalho seja executada para recolha e processamento. Para obter detalhes, consulte Processar a mensagem inicial.

Âmbito "Catch"

Se as Try ações no âmbito falharem, a aplicação lógica ainda terá de fechar a sessão. A Catchação de âmbito é executada quando a ação de Try âmbito resulta no estado, , FailedSkippedou TimedOut. O âmbito devolve uma mensagem de erro que inclui o ID da sessão onde ocorreu o problema e termina a aplicação lógica.

Eis o fluxo de nível superior na ação de Catch âmbito quando os detalhes são fechados:

Fluxo de trabalho de ação de âmbito

Nome Descrição
Close a session in a queue and fail Esta ação do Service Bus fecha a sessão na fila para que o bloqueio da sessão não fique aberto. Para obter detalhes, consulte Fechar uma sessão numa fila e falhar.
Find failure msg from 'Try' block Esta ação Matriz de Filtro cria uma matriz a partir das entradas e saídas de todas as ações dentro do Try âmbito com base nos critérios especificados. Neste caso, esta ação devolve as saídas das ações que resultaram no Failed estado. Para obter detalhes, veja Localizar falha no msg do bloco "Experimentar".
Select error details Esta ação Selecionar cria uma matriz que contém objetos JSON com base nos critérios especificados. Estes objetos JSON são criados a partir dos valores na matriz criada pela ação anterior, Find failure msg from 'Try' block. Neste caso, esta ação devolve uma matriz que contém um objeto JSON criado a partir dos detalhes de erro devolvidos da ação anterior. Para obter detalhes, consulte Selecionar detalhes do erro.
Terminate Esta ação Terminar interrompe a execução do fluxo de trabalho, cancela quaisquer ações em curso, ignora quaisquer ações restantes e devolve o estado especificado, o ID da sessão e o resultado do erro da açãoSelect error details. Para obter detalhes, veja Terminar a aplicação lógica.

Concluir o modelo

Para fornecer os valores para o acionador e as ações no modelo De entrega por ordem correlacionada com sessões do service bus , siga estes passos. Tem de fornecer todos os valores necessários, marcados por um asterisco (*), antes de poder guardar a sua aplicação lógica.

Inicializar a sessão

  • Para o acionador Quando uma mensagem é recebida numa fila (peek-lock), forneça estas informações para que o modelo possa inicializar uma sessão com a propriedade ID da sessão , por exemplo:

    Detalhes do acionador do Service Bus para

    Nota

    Inicialmente, o intervalo de consulta está definido como três minutos para que a aplicação lógica não seja executada com mais frequência do que o esperado e resulte em custos de faturação inesperados. Idealmente, defina o intervalo e a frequência como 30 segundos para que a aplicação lógica seja acionada imediatamente quando uma mensagem chegar.

    Propriedade Necessário para este cenário Valor Descrição
    Nome da fila Sim <nome da fila> O nome da fila do Service Bus criada anteriormente. Este exemplo utiliza "Fabrikam-Service-Bus-Queue".
    Tipo de fila Sim Principal A sua fila principal do Service Bus
    ID da sessão Sim Seguinte disponível Esta opção obtém uma sessão para cada execução de acionador, com base no ID de sessão da mensagem na fila do Service Bus. A sessão também está bloqueada para que nenhuma outra aplicação lógica ou outro cliente possa processar mensagens relacionadas com esta sessão. As ações subsequentes do fluxo de trabalho processam todas as mensagens associadas a essa sessão, conforme descrito mais à frente neste artigo.

    Eis mais informações sobre as outras opções de ID de sessão :

    - Nenhuma: a opção predefinida, que não resulta em sessões e não pode ser utilizada para implementar o padrão de comboio sequencial.

    - Introduza o valor personalizado: utilize esta opção quando souber o ID de sessão que pretende utilizar e quiser executar sempre o acionador para esse ID de sessão.

    Nota: o conector do Service Bus pode guardar um número limitado de sessões exclusivas de cada vez, desde Azure Service Bus até à cache do conector. Se a contagem de sessões exceder este limite, as sessões antigas serão removidas da cache. Para obter mais informações, veja Mensagens do Exchange na cloud com o Azure Logic Apps e Azure Service Bus.

    Intervalo Yes <número de intervalos> O número de unidades de tempo entre periodicidades antes de verificar a existência de uma mensagem.
    Frequência Sim Segundo, Minuto, Hora, Dia, Semana ou Mês A unidade de tempo para a periodicidade a utilizar ao verificar a existência de uma mensagem.

    Sugestão: para adicionar um Fuso horário ou Hora de início, selecione estas propriedades na lista Adicionar novo parâmetro .

    Para obter mais informações sobre o acionador, veja Service Bus – Quando uma mensagem é recebida numa fila (peek-lock). O acionador produz um ServiceBusMessage.

Depois de inicializar a sessão, o fluxo de trabalho utiliza a ação Inicializar variável para criar uma variável booleana que inicialmente se definiu como false e indica quando as seguintes condições são verdadeiras:

  • Não existem mais mensagens na sessão disponíveis para leitura.

  • O bloqueio de sessão já não precisa de ser renovado para que a instância do fluxo de trabalho atual possa ser concluída.

Detalhes da ação

Em seguida, no bloco Experimentar , o fluxo de trabalho executa ações na primeira mensagem lida.

Processar a mensagem inicial

A primeira ação é uma ação do Service Bus do marcador de posição, Enviar mensagem inicial para o tópico, que pode substituir por qualquer outra ação que pretenda processar a primeira mensagem da sessão na fila. O ID da sessão especifica a sessão a partir da origem da mensagem.

A ação do Service Bus do marcador de posição envia a primeira mensagem para um tópico do Service Bus especificado pela propriedade ID da Sessão . Desta forma, todas as mensagens associadas a uma sessão específica vão para o mesmo tópico. Todas as propriedades do ID da Sessão para ações subsequentes neste modelo utilizam o mesmo valor de ID de sessão.

Detalhes da ação do Service Bus para

  1. Na ação Service Bus, conclua a mensagem inicial na fila, forneça o nome da fila do Service Bus e mantenha todos os outros valores de propriedade predefinidos na ação.

    Detalhes da ação do Service Bus para

  2. Na ação Service Bus, abandone a mensagem inicial da fila, forneça o nome da fila do Service Bus e mantenha todos os outros valores de propriedade predefinidos na ação.

    Detalhes da ação do Service Bus para

Em seguida, irá fornecer as informações necessárias para as ações que se seguem à ação Concluir mensagem inicial na fila . Irá começar com as ações em Embora existam mais mensagens para a sessão no ciclo da fila .

Embora existam mais mensagens para a sessão na fila

Este ciclo Até executar estas ações enquanto as mensagens existem na fila ou até passar uma hora. Para alterar o limite de tempo do ciclo, edite o valor da propriedade Tempo Limite do ciclo.

  • Obtenha mensagens adicionais da fila enquanto existem mensagens.

  • Verifique o número de mensagens restantes. Se as mensagens ainda existirem, continue a processar mensagens. Se não existirem mais mensagens, o fluxo de trabalho define a isDone variável como truee sai do ciclo.

Até ao ciclo - Processar mensagens durante a fila

  1. Na ação Service Bus, obtenha mensagens adicionais da sessão e indique o nome da fila do Service Bus. Caso contrário, mantenha todos os outros valores de propriedade predefinidos na ação.

    Nota

    Por predefinição, o número máximo de mensagens está definido como 175, mas este limite é afetado pelo tamanho da mensagem e pela propriedade tamanho máximo da mensagem no Service Bus. Para obter mais informações, veja Tamanho da mensagem para uma fila.

    Ação do Service Bus –

    Em seguida, o fluxo de trabalho divide-se nestes ramos paralelos:

    • Se ocorrer um erro ou falha ao verificar se existem mensagens adicionais, defina a isDone variável como true.

    • As mensagens Processar se tivermos alguma condição verificam se o número de mensagens restantes é zero. Se existirem mensagens falsas e mais, continue o processamento. Se existirem mensagens verdadeiras e não existirem mais, o fluxo de trabalho define a isDone variável como true.

    Condição - Processar mensagens se existirem

    Na secção Se falso , um Para cada ciclo processa cada mensagem por ordem inicial e inicial (FIFO). Nas Definições do ciclo, a definição Controlo de Simultaneidade está definida como 1, pelo que apenas uma única mensagem é processada de cada vez.

    Ciclo

  2. Para as ações do Service Bus, conclua a mensagem numa fila e Abandone a mensagem numa fila, indique o nome da fila do Service Bus.

    Ações do Service Bus –

    Após a opção Embora existam mais mensagens para a sessão na fila , o fluxo de trabalho define a isDone variável como true.

Em seguida, irá fornecer as informações necessárias para as ações no bloqueio de sessão Renovar até ao ciclo cancelado.

Renovar o bloqueio de sessão até ser cancelado

Este ciclo Até garante que o bloqueio de sessão é mantido por esta aplicação lógica enquanto as mensagens existem na fila ou até passar uma hora ao executar estas ações. Para alterar o limite de tempo do ciclo, edite o valor da propriedade Tempo Limite do ciclo.

  • Atraso de 25 segundos ou uma quantidade de tempo inferior à duração do bloqueio da fila que está a ser processada. A duração de bloqueio mais pequena é de 30 segundos, pelo que o valor predefinido é suficiente. No entanto, pode otimizar o número de vezes que o ciclo é executado ao ajustar adequadamente.

  • Verifique se a isDone variável está definida como true.

    • Se isDone estiver definido como true, o fluxo de trabalho ainda está a processar mensagens, pelo que o fluxo de trabalho renova o bloqueio na sessão na fila e verifica novamente a condição de ciclo.

      Tem de indicar o nome da fila do Service Bus na ação Service Bus, Renovar bloqueio na sessão numa fila.

    • Se isDone estiver definido como true, o fluxo de trabalho não renova o bloqueio na sessão na fila e sai do ciclo.

    Até ao ciclo –

Renovar o bloqueio na sessão numa fila

Esta ação do Service Bus renova o bloqueio na sessão na fila enquanto o fluxo de trabalho ainda está a processar mensagens.

  • Na ação Service Bus, Renove o bloqueio na sessão numa fila e indique o nome da fila do Service Bus.

    Ação do Service Bus –

Em seguida, irá fornecer as informações necessárias para a ação do Service Bus, Fechar uma sessão numa fila e ter êxito.

Fechar uma sessão numa fila e ter êxito

Esta ação do Service Bus fecha a sessão na fila depois de o fluxo de trabalho terminar de processar todas as mensagens disponíveis na fila ou o fluxo de trabalho abandonar a mensagem inicial.

  • Na ação Service Bus, feche uma sessão numa fila e tenha êxito, forneça o nome da fila do Service Bus.

    Ação do Service Bus –

As secções seguintes descrevem as ações na Catch secção, que processam erros e exceções que ocorrem no fluxo de trabalho.

Fechar uma sessão numa fila e falhar

Esta ação do Service Bus é sempre executada como a primeira ação no Catch âmbito e fecha a sessão na fila.

  • Na ação Service Bus, feche uma sessão numa fila e falhe, forneça o nome da fila do Service Bus.

    Ação do Service Bus –

Em seguida, o fluxo de trabalho cria uma matriz que tem as entradas e saídas de todas as ações no Try âmbito para que a aplicação lógica possa aceder a informações sobre o erro ou falha que ocorreu.

Localizar o msg de falha no bloco "Experimentar"

Esta ação Matriz de Filtro cria uma matriz que tem as entradas e saídas de todas as ações dentro do Try âmbito com base nos critérios especificados através da result() função. Neste caso, esta ação devolve as saídas das ações que têm Failed o estado com a função e item() aequals() função.

Ação de matriz de filtro –

Eis a definição JSON para esta ação:

"Find_failure_msg_from_'Try'_block": {
   "inputs": {
      "from": "@Result('Try')",
      "where": "@equals(item()['status'], 'Failed')"
   },
   "runAfter": {
      "Close_the_session_in_the_queue_and_fail": [
         "Succeeded"
      ]
   },
   "type": "Query"
},

Em seguida, o fluxo de trabalho cria uma matriz com um objeto JSON que contém as informações de erro na matriz devolvidas da ação Find failure msg from 'Try' block .

Selecionar detalhes do erro

Esta ação Selecionar cria uma matriz que contém objetos JSON com base na matriz de entrada que é a saída da ação anterior, Find failure msg from 'Try' block. Especificamente, esta ação devolve uma matriz que tem apenas as propriedades especificadas para cada objeto na matriz. Neste caso, a matriz contém o nome da ação e as propriedades do resultado do erro.

Selecionar ação –

Eis a definição JSON para esta ação:

"Select_error_details": {
   "inputs": {
      "from": "@body('Find_failure_msg_from_''Try''_block')[0]['outputs']",
      "select": {
         "action": "@item()['name']",
         "errorResult": "@item()"
      }
   },
   "runAfter": {
      "Find_failure_msg_from_'Try'_block": [
         "Succeeded"
      ]
   },
   "type": "Select"
},

Em seguida, o fluxo de trabalho para a execução da aplicação lógica e devolve o estado de execução juntamente com mais informações sobre o erro ou falha que ocorreu.

Terminar a execução da aplicação lógica

Esta ação Terminar interrompe a execução da aplicação lógica e devolve Failed como o estado da execução da aplicação lógica juntamente com o ID da sessão e o resultado do erro da açãoSelect error details.

Terminar a ação para parar a execução da aplicação lógica

Eis a definição JSON para esta ação:

"Terminate": {
   "description": "This Failure Termination only runs if the Close Session upon Failure action runs - otherwise the LA will be terminated as Success",
   "inputs": {
      "runError": {
         "code": "",
         "message": "There was an error processing messages for Session ID @{triggerBody()?['SessionId']}. The following error(s) occurred: @{body('Select_error_details')['errorResult']}"
         },
         "runStatus": "Failed"
      },
      "runAfter": {
         "Select_error_details": [
            "Succeeded"
         ]
      },
      "type": "Terminate"
   }
},

Guardar e executar aplicação lógica

Depois de concluir o modelo, pode agora guardar a sua aplicação lógica. Na barra de ferramentas do estruturador, selecione Guardar.

Para testar a sua aplicação lógica, envie mensagens para a fila do Service Bus.

Passos seguintes