Polémica en la lectura de los eventos antiguos
Pregunta
Estoy teniendo un problema con una aplicación mediante Smack 3.1 y un servidor Openfire corriendo. Al iniciar la aplicación, se leerá el último mensaje en el nodo. Esto no funciona ya que los mensajes se analizan, procesan y se colocan en una base de datos. Además de enviar un mensaje de tiempo de creación en la carga útil, ¿hay alguna manera de detener esta duplicación? (En realidad, si hay alguna forma de señal que un mensaje ha sido "consumido" sería fantástico)
Solución
Si usted se refiere a PubSub entonces se puede configurar el nodo para que no persista elementos con persist_items
y max_items
.
Si no tiene ningún control sobre la creación de nodo a continuación, lo que puede hacer es cheque por el espacio de nombres de retardo (jabber:x:delay
y / o urn:xmpp:delay
) en el paquete
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
...
}
También puede tomar alguna decisión al examinar el objeto DelayInformation
en cuanto al tiempo, la razón, etc.
Si se trata de PEP, entonces siempre se obtendrá el último elemento publicado y creo que no hay manera de determinar si se ha retrasado a saber. no hay información de retardo en el paquete.
Es necesario obtener ya sea versiones compiladas o construir su propia de apoyo pubsub. No creo que la versión actual Smack 3.1.0 supoorts pubsub.