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)

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top