Sistema de fila por banco de dados

4 respostas
A

Ola pessoal!

Tenho uma tabela no Mysql na WEB chamada fila, aonde são gravados uns “pedidos”.
Preciso que duas maquinas acessem essa tabela para retirar os pedidos, mais a maquina que acessar tem que apagar o pedido presente para que a outra não tenha acesso.

Outra coisa, como saber quando essa tabela apresenta um novo pedido? faço um while para ficar criando query acada x segundo?

Alguém sabe um jeito fácil para fazer isso?

4 Respostas

E

A resposta à primeira pergunta é “transações”. Usualmente você começa uma transação, faz a consulta, atualiza a tabela (se for o caso, é claro) e termina a transação.

Bom, se vai usar uma tabela de banco de dados para isso, você não escapa de ter que consultar periodicamente o banco (já que triggers, que são recursos do banco de dados que permitem executar código quando registros forem alterados, inseridos ou removidos, não costuma executar código externo ao banco de dados, até por razões de segurança.

A

Existe alguma Query que lê a tabela e apaga o registro ao mesmo tempo?

A

Como sugestão: não seria melhor usar um mecanismo de fila realmente ao invés de fazer no banco?

Você pode aplicar a seguinte sequência para isso (Digamos que as duas máquinas acessando são M1 e M2) :

  • Crie um campo Maquina nessa tabela de pedidos

  • Ao inserir registros na tabela, este campo deve ser nulo.

  • Quando for a hora de uma máquina ler pedidos, a primeira coisa que ela faz é um Update, setando Maquina com o nome dela ONDE Maquina for nulo.

  • Select em todos os campos onde Maquina for igual o nome da máquina

  • Processa os pedidos

  • Apaga todos os campos onde Maquina for igual nome da máquina

Você pode querer realizar todas essas etapas dentro da mesma transação, se o processamento de pedidos for relativamente rápido.

A

legal!

Gostei da dica, vou tentar
Sera que eu teria problema se colocasse isso num while nas duas maquinas, não trabalhando com transação?

UPDATE fila SET maquina=1 WHERE maquina=0 order by codigo limit 5

Vlw!!

Criado 28 de agosto de 2012
Ultima resposta 29 de ago. de 2012
Respostas 4
Participantes 3