¿Cómo puedo crear una asincronía en el sistema de notificación de uso de los servicios web RESTful?

Tengo una aplicación en Java que me hace disponible a través de servicios web RESTful. Quiero crear un mecanismo para que los clientes pueden registrarse para recibir notificaciones de eventos. El problema es que no hay ninguna garantía de que los programas cliente será programas de Java y por lo tanto no voy a ser capaz de utilizar JMS para esto (es decir, si cada cliente era una aplicación Java, a continuación, nos podría permitir a los clientes a suscribirse a un tema JMS y escuchar allí para mensajes de notificación).

El caso de uso es más o menos la siguiente:

  1. Un cliente se registra con mi servidor de aplicación, a través de un servicio web RESTful de la llamada, lo que indica que está interesado en obtener un mensaje de notificación cada vez que un objeto específico es actualizado.
  2. Cuando el objeto de interés se actualiza entonces mi aplicación de servidor necesita para poner una notificación a todos los clientes que están interesados en ser notificados de este evento.

Como he mencionado anteriormente sé cómo iba a hacerlo si todos los clientes fueran aplicaciones Java — configurar un tema en el que los clientes pueden escuchar los mensajes de notificación. Sin embargo no puedo utilizar ese enfoque, ya que es muy probable que muchos clientes no serán capaces de escuchar un tema JMS para mensajes de notificación.

Alguien aquí puede aclararme cómo este problema suele solucionarse? El mecanismo que le puedo dar para el uso de una API RESTful?

  • De hecho, he construido un sistema así, para mi empresa, con un ojo a la que posiblemente sea la liberación como de código abierto. Está escrito en Groovy, pero no depende de Groovy ser instalado en un servidor, se ejecuta como una aplicación Java utilizando Restlet y el Java de Servicios de Contenedor. Se puede modificar fácilmente para que se ejecute en un Servidor de Aplicaciones Java. Se utiliza un Objeto de Acceso a Datos como una capa de abstracción de la base de datos. Se suministra con un adaptador para CouchDB, pero sería bastante fácil de implementar uno para una base de datos diferentes. Estaría interesado en este sistema, si yo fuera a liberar el código abierto?
InformationsquelleAutor James Adams | 2009-07-07

4 Kommentare

  1. 8

    Puedo pensar en cuatro enfoques:

    1. De Twitter enfoque: registrar el Cliente y, a continuación, llama de nuevo de forma periódica con un GET para recuperar las notificaciones.

    2. El Cliente describe cómo desea recibir la notificación cuando se hace la solicitud de registro. De esa manera usted podría permitir que JMS para aquellos que pueden soportar y se vuelve a correo electrónico o similar para aquellos que no pueden.

    3. Tomar una dirección URL durante la solicitud de inscripción y enviar a cada Cliente de forma individual cuando tienes una notificación. Apenas Pub/Sub pero el efecto sería similar. Por supuesto, se estaría suponiendo que el Cliente estaba escuchando para estas notificaciones, y había puesto en marcha su Cliente de acuerdo a sus especificaciones.

    4. Comprar IBM WebSphere MQ (MQSeries). Mejor producto de IBM nunca. No DESCANSO, pero es ideal para multi-plataforma de integración como este.

  2. 4

    Tenemos este problema y la necesidad de baja latencia de actualizaciones asincrónicas a relativamente pocos oyentes. Nuestros dos soluciones alternativas han sido:

    1. De votación: Martillo de la lista de recursos que necesita con las solicitudes GET
    2. Streaming actualizaciones de los eventos: Proporcionar un monitor de recursos. El servidor mantiene la conexión abierta. Como se producen los eventos, el servidor transmite una secuencia de descripciones de eventos utilizando multipart tipo de contenido o fragmentada de codificación de la transferencia.
  3. 3

    En la respuesta a la RESTful solicitud, usted podría proporcionar una individualizado de Descanso URL que el cliente puede monitorear las actualizaciones.

    Que es, tiene una dirección URL (/Signup.htm, digamos), que acepta la información del cliente (id, si procede, de id de objeto al monitor) y devuelve una url personalizada (/Monitor/XYZPDQ), donde XYZPDQ es un UUID creado para ese cliente en particular. El cliente puede encuesta que la dirección URL personalizada en algún intervalo, y recibirá una notificación si se produce la actualización.

    Si no se tiene en cuenta que el cliente es (y no quiero crear tantos Uuid) sólo podría haber separado de Descanso Url para cada objeto que desee ser controlados, y el «registro» URL sólo devuelve la correcta.

    Como John Saunders dice que usted no puede realmente hacer más sencilla de publicación/suscripción a través de HTTP.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea