Skip to Content

@jumentix/mutex-service

Adapter privado e reutilizável de mutex para runtimes Jumentix.

Responsabilidade no escopo

  • Camada: persistência / coordenação
  • Responsável por: locks nomeados sobre um cliente KV
  • Usado com: key-value-storage
  • Não responsável por: documentos de negócio ou messaging

Contrato

MutexService.compile(keyValueStorageClient, options) cria um singleton por processo apoiado em um IKeyValueStorageClient. O cliente deve implementar get, set, del, connect e disconnect assíncronos, retornando IServiceResponse.

  • lock(resourceName, uuid) retorna { previouslyLocked, locked } em result.
  • isLocked(resourceName, uuid) retorna um booleano em result.
  • unlock(resourceName, uuid) repassa o resultado da remoção no storage.
  • Falhas são retornadas em error; elas não são lançadas ao chamador.
  • reset() limpa o singleton, principalmente para testes isolados e recomposição.

O prefixo padrão da chave é mutex; um prefix customizado pode ser fornecido na compilação.

Validação

bun run --filter @jumentix/mutex-service build bun run --filter @jumentix/mutex-service typecheck bun run --filter @jumentix/mutex-service lint bun run --filter @jumentix/mutex-service test

Experimente no navegador

Mutex com KV em memória

Proteja uma atualização de Category enquanto dois escritores de Task competem pelo mesmo recurso.

const keyValue = api.createKeyValueStorage();
const mutex = api.create(keyValue);

const firstWriter = await mutex.lock('category', 'work');
const secondWriter = await mutex.lock('category', 'work');
const lockedBeforeRelease = await mutex.isLocked('category', 'work');
await mutex.unlock('category', 'work');
const lockedAfterRelease = await mutex.isLocked('category', 'work');

return {
  firstWriter: firstWriter.result,
  secondWriter: secondWriter.result,
  lockedBeforeRelease: lockedBeforeRelease.result,
  lockedAfterRelease: lockedAfterRelease.result
};

Documentação completa

Veja o guia de uso.