2012-01-26 26 views
5

¿Qué pasará con los mensajes publicados en un tema virtual cuando no hay consumidores escuchando? ¿El corredor los mantendrá por cierto tiempo hasta que haya un suscriptor disponible?Temas virtuales/colas y durabilidad

Más específicamente: En los mensajes T0 y T1 se publican M0 y M1. En T2, el consumidor C1 se conecta, ¿recibirá M0 y M1? Obviamente, los mensajes M2 y M3 publicados en T3 y T4 serán recibidos por C1, pero ¿qué será un nuevo consumidor, C2, que se conecte en T5 receice? Todos los mensajes, M2 y M3, o ninguno?

+0

Tendré que preguntar, ¿qué has intentado hasta ahora? – Eugene

+0

no he tenido tiempo de intentarlo aún, lo haré. Solo una cosa teórica para mí por ahora, pero necesitaré saber –

Respuesta

4

Depende de la naturaleza del tema: si el tema es duradero (tiene consumidores duraderos suscribiéndose a él), el intermediario retendrá los mensajes en el tema hasta que todos los consumidores duraderos los consuman. si el tema no es duradero (no hay consumidores duraderos), el mensaje ni siquiera se enviará al tema, ya que no habrá una suscripción duradera.

Para su ejemplo, voy a considerar que está utilizando suscripciones/consumidores durables: Caso 1:

  • T-2 C1 y C2 hacen suscripción duradera al tema
  • T-1 C1 y C2 desconecte
  • T0: M0 se contabiliza
  • T1: M1 se contabiliza
  • T2: C1 se conecta. C1 recibe M0 y M1
  • T3: M3 se publica. C1 recibe M3
  • T4: M4 se publica. C1 recibe M4
  • T5: C2 se conecta, C2 recibe M0, M1, M2, M3, M4

Eso es debido a que se mantienen durable subscriptions Necesita ser muy cuidadoso al utilizar temas duraderos/colas: si el consumidor no se da de baja, el agente retendrá los mensajes hasta que explote el almacén de mensajes. Deberá asegurarse de que no ocurra (configurando eviction policies o poniendo un Time to Live en los mensajes). Por supuesto, el ejemplo anterior variará dependiendo de cuándo el consumidor realice la suscripción duradera.

Si está utilizando temas no duraderos:

  • T-2 C1 y C2 haces la suscripción normal al tema
  • T-1 C1 y desconexión C2
  • T0: M0 se registró
  • T1: M1 se ha publicado
  • T2: C1 se conecta. C1 no recibe nada
  • T3: M3 está publicado. C1 recibe M3
  • T4: M4 se publica.C1 recibe M4
  • T5: C2 se conecta, C2 no recibe nada
0

Por qué no puede haber un observador/patrón observable - tomando el ejemplo anterior:

Cuando M0 es publicado, C1 y C2 (consumidores suscritos) son despertados y pueden consumir el evento? Veo este patrón mejor que el durable y no duradero, un enfoque híbrido.

1

Hay dos maneras de permitir que los mensajes publicados a un tema virtual se puedan actualizar. El primero es a través del suscriptor duradero y el otro es que el editor envía mensajes con el modo de entrega "PERSISTENTE". Cuando los mensajes se publican con el modo de entrega de "PERSISTENT", el mensaje se guardará en el disco; de lo contrario, se guardará en la memoria.