Pergunta

No trabalho, estamos discutindo se devemos ou não implementar uma fila de mensagens para o nosso aplicativo PHP. Atualmente, estamos olhando para o ActiveMQ da Apache. Uma coisa em que não estamos totalmente claros é se é possível desencadear ou não um processo com base em uma mensagem que chega em uma fila.

A literatura que encontramos até agora parece indicar que as filas de mensagens são um mecanismo baseado em tração: o processo funciona regularmente (como um daemon ou um cron) e retira suas mensagens recebidas da fila. É possível transformar isso em um mecanismo de pressão? Ou seja, existe uma maneira de fazer com que a fila de mensagens realmente inicie uma solicitação HTTP (ou um processo) quando uma mensagem chegar? Uma opção que encontramos é o modelo de publicação/inscrição, mas isso requer executar nosso aplicativo PHP em um loop infinito para manter uma conexão aberta (TCP) com a instância do ActiveMQ, que parece um pouco de um kludge.

Qualquer entrada seria muito apreciada.

Foi útil?

Solução

Uma solução óbvia é deixar o editor iniciar a solicitação HTTP logo após armazenar a mensagem, mas isso levanta a pergunta: por que você está usando uma fila de mensagens?

Ter um conjunto de consumidores ouvindo uma fila e fazendo seu trabalho à medida que as mensagens vêm não é um kludge, é um design bom e escalável. (Embora eu concorde que a execução de um processo PHP em um loop infinito tem seus contras.)

Por que você escolheu uma fila de mensagens em oposição a, digamos, um banco de dados que armazena as mensagens? O "produtor" pode armazenar a mensagem como uma linha em uma tabela e depois acionar o "consumidor" com o PK da mensagem.

Outras dicas

Considere a criação de uma rota de camelo que puxa mensagens da fila (componente JMS) e avance para um endpoint HTTP (componente HTTP). Você pode até decidir hospedar a rota de camelo no processo de corretor ActiveMQ - criando uma espécie de corretor de roteamento inteligente. O ActiveMQ facilita o agrupamento das bibliotecas do Camel Core na distribuição ActiveMQ.

Aqui está uma postagem relevante / relacionada recente:

Postagem http do ActiveMQ usando camelo

Seu conceito de design de um aplicativo para monitorar a fila é a maneira da indústria de acionar um aplicativo externo a ser executado. Dê uma olhada no IBM WebSphere "Trigger Monitor Applications". Na implementação deles, você pode ter vários monitores de gatilho para iniciar aplicativos que processassem mensagens em uma fila, para que ele escala muito bem como o monitor de gatilho é executado no servidor, os aplicativos estão instalados (e se você projetar a escalabilidade para que você possa poder poder poder poder poder poder poder poder poder poder poder poder ser capazes de ser capazes. tem vários servidores de aplicativos, se necessário).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top