WebSphere Message Broker controla o acesso aos arquivos para que apenas um nó do arquivo por vez possa ler ou gravar em um arquivo.
Quando um fluxo de mensagem usa o nó FileInput ou FileOutput, as instâncias (encadeamentos) adicionais podem ser associadas ao fluxo de mensagem, ou os nós do arquivo em outros fluxos de mensagem nos mesmos ou em diferentes grupos de execução podem referir-se a arquivos no mesmo diretório. O WebSphere Message Broker controla a maneira com que múltiplos processos lêem e gravam em arquivos movendo os arquivos para o diretório mqsitransitin durante o processamento e bloqueando-os enquanto estão sendo processados. O diretório mqsitransitin é um subdiretório do diretório de entrada especificado no nó FileInput.
Se você estiver usando o nó FileInput e optar por incluir subdiretórios, um diretório mqsitransitin será criado, conforme necessário, em todos os locais em que houver um arquivo para ser processado.
Quando o nó FileInput lê um arquivo, ele primeiro move o arquivo para o diretório mqsitransitin, no qual é mantido durante o processamento. Um prefixo (contendo o UUID do grupo de execução) é incluído no nome do arquivo para indicar qual grupo de execução está processando o arquivo. Enquanto o arquivo está neste diretório, nenhum outro grupo de execução pode acessar o arquivo. O broker mantém um subdiretório lock no diretório mqsitransitin, para assegurar que os arquivos no diretório de entrada sejam acessados por apenas um grupo de execução por vez.
Se múltiplos fluxos de mensagens ou instâncias em um grupo de execução estiverem lendo a partir do mesmo diretório de entrada, apenas uma instância de um fluxo de mensagens será alocada para lê-lo. Cada registro do arquivo é processado em série por essa instância. Outras instâncias do fluxo de mensagens, ou outros fluxos de mensagens, podem processar simultaneamente outros arquivos, cujos nomes correspondem ao padrão especificado na propriedade Nome ou Padrão do Arquivo do nó.
Enquanto um arquivo está sendo processado, o sistema de arquivos é usado para bloquear o arquivo. Como resultado, outros programas (incluindo outros grupos de execução) são impedidos de ler, gravar ou excluir o arquivo enquanto ele está sendo processado pelos nós do arquivo.
Enquanto um nó FileInput está lendo um arquivo, o arquivo permanece no diretório mqsitransitin até ele ter sido totalmente processado (ou até um erro irrecuperável ocorrer). Se o arquivo precisar ser retido, ele será mantido em um subdiretório do diretório mqsitransitin.
Quando o arquivo tiver sido processado, ele será movido do diretório mqsitransitin de volta ao diretório de entrada. Entretanto, se o grupo de execução parar inesperadamente enquanto o arquivo estiver no diretório mqsitransitin, será possível restaurar manualmente o arquivo de entrada no diretório de entrada removendo o prefixo do UUID do grupo de execução do nome do arquivo e, em seguida, movendo-o para o diretório de entrada. O arquivo de entrada é, então, processado pelo próximo nó FileInput que varre o diretório.
Se você usar um servidor NFS e houver nós Arquivo em grupos de execução diferentes que acessem o mesmo diretório no servidor NFS, assegure-se de que esteja usando o NFS versão 4 para suportar corretamente o bloqueio de arquivo.
Os arquivos que são criados e gravados por um nó FileOutput são colocados no diretório de saída quando são concluídos. Enquanto os registros estão sendo incluídos em um arquivo, ele é mantido no subdiretório mqsitransit.
Cada registro é gravado por uma única instância de fluxo de mensagens. Todas as instâncias do fluxo de mensagens configuradas para gravar registros em um arquivo específico podem anexar registros nesse arquivo. Como as instâncias podem ser executadas em qualquer ordem, os registros que elas gravam podem ser intercalados, o que significa que a sequência de registros pode ser alterada. Se você precisar manter a sequência de registros no arquivo de saída, assegure-se de que apenas uma instância do nó FileOutput utilize o arquivo. Para assegurar que apenas uma instância do nó FileOutput use o arquivo, configure o fluxo de mensagem que contém o nó para usar o conjunto de instâncias adicionais com zero instâncias e assegure-se de que outros fluxos de mensagem não gravem no mesmo arquivo.
Enquanto um arquivo está sendo processado, o sistema de arquivos é usado para bloquear o arquivo. Como resultado, outros programas (incluindo outros grupos de execução) são impedidos de ler, gravar ou excluir o arquivo enquanto ele está sendo processado pelos nós do arquivo. Esse bloqueio é retido por um curto período após um nó FileOutput gravar no arquivo sem concluí-lo, deixando-o no diretório de trânsito. Se os fluxos de mensagens que estão no mesmo grupo de execução usarem o mesmo arquivo de saída e executarem rapidamente de maneira suficiente, o broker não precisará abandonar o bloqueio antes do arquivo ser concluído. Entretanto, se os fluxos de mensagens tiverem intervalos mais longos entre a execução, o broker abandonará o bloqueio e outro processo ou grupo de execução poderá adquirir um bloqueio no arquivo. Para evitar essa situação, assegure-se de que os diretórios de saída não sejam compartilhados entre os grupos de execução.