J'ai un problème avec une application utilisant Smack 3.1 et un serveur tournant openfire. Au démarrage de l'application, il lira le dernier message sur le noeud. Cela ne fonctionne pas puisque les messages sont analysés, traités et placés dans un db. En plus d'envoyer un temps de création de message dans la charge utile, y a-t-il un moyen d'arrêter cette duplication? (En fait, s'il y a de toute façon de signaler qu'un message a été « consommé » serait fantastique)Smack lecture de vieux événements
Répondre
Si vous faites référence à PubSub vous pouvez configurer le nœud afin qu'il ne persiste pas les éléments avec persist_items
et max_items
.
Si vous avez aucun contrôle sur la création de nœuds alors ce que vous pouvez faire est de vérifier pour l'espace de noms de retard (jabber:x:delay
et/ou urn:xmpp:delay
) dans le paquet
public void processPacket(Packet pkt) {
DelayInformation delay = (DelayInformation)pkg.getExtension("x", "jabber:x:delay");
if (delay != null)
return; //Discard this packet
delay = (DelayInformation)pkg.getExtension("x", "urn:xmpp:delay");
if (delay != null)
return; //Discard this as well
//Otherwise this is a good packet
...
}
Vous pouvez également prendre une décision en examinant la DelayInformation
objet combien de temps, raison, etc
Si c'est PEP alors vous aurez toujours le dernier article publié et je pense qu'il n'y a aucun moyen de déterminer si elle a été retardée à savoir. il n'y a pas d'information de retard dans le paquet.
Vous devez obtenir nightly builds ou build your own pour le support pubsub. Je ne pense pas que la version actuelle de Smack 3.1.0 supoorts pubsub.
Lorsque vous avez dit pubsub il a déclenché mes souvenirs et un rapide coup d'oeil à travers les dépendances maven révèle que nous utilisons smackx-pubsub .4. Je suis toujours en train de fouiller mais vous m'avez rapproché du monde (et si ça marche, une réponse acceptée) –
De quel type de message/nœud parlez-vous? – Robin