J'ai besoin d'une application web PHP écrire des messages dans une file d'attente non bloquante et d'autres processus de les mettre en file d'attente. Ma conception actuelle est l'application PHP créer un ZMQ.PUSH
socket, faire un connect
à l'adresse de destination et send
le message. Alors qu'à la destination, un processus (Java) crée un socket ZMQ.PULL
, faites un bind
sur la même adresse et receive
le message. Cependant, lorsque le processus dequeuer est en panne (ou non démarré), les messages que l'application PHP a envoyés pendant cette période sont perdus (non remis au dequeuer lorsque le processus redémarre sur la même adresse). Est-ce un problème avec l'application PHP créant un nouveau ZMQ.Context
à chaque fois?Modèle ZMQ PUSH/PULL: Messages perdus lorsqu'un noeud PUSHes messages et quitte
Par exemple, j'ai créé un autre processus Java pour écrire des messages dans la file d'attente.
public static void main(String[] args) {
ZMQ.Context context = ZMQ.context(1);
ZMQ.Socket socket = context.socket(ZMQ.PUSH);
socket.connect("tcp://localhost:5557");
for(int i = 0; i < 10; i++) {
socket.send(("Sending : " + message).getBytes(), 0);
}
}
Cela a le même problème de messages perdus si le processus de dequeuing ne démarre pas au moment où les processus ci-dessus est terminé.
Mais l'ajout d'un while(true) {}
à la fin du corps de la méthode ci-dessus n'entraîne aucun message perdu - tous les messages sont remis au démarrage de dequeuer. Est-ce que j'ai raison de supposer que l'objet ZMQ.Context
étant collecté par ordures cause le problème ici? Si oui, alors comment résoudre ce problème dans une application web PHP? Puisque je ne peux pas persister l'objet ZMQ.Context
.