Ligero Bus de Mensajes de la biblioteca

Me será a partir de un pequeño Java (GWT realmente), proyecto en el futuro cercano, y yo estoy en «recopilación de información» de la fase.

Q: ¿hay un ligero Bus de Mensajes de la biblioteca escrita en Java?

Mis requisitos son de peso ligero, demasiado 🙂

  1. asíncrono (no hay necesidad de sincronización)
  2. de multidifusión y punto-a-punto
  3. ningún mensaje estricta ordenación
  4. mensaje de «sobre» lo ideal «propiedad» por Bus de Mensajes (es decir, en términos de gestión del ciclo de vida)
  5. entrega localizada (es decir, no se inter-proceso ni inter-nodo)

Actualización: parece que GWT ahora apoya un sistema integrado de «bus de eventos».

InformationsquelleAutor jldupont | 2009-12-23

5 Kommentare

  1. 9

    Sé que esto es una vieja pregunta, pero creo que la más moderna solución es utilizar La guayaba del Bus de Eventos (concedido no estoy seguro de si va a trabajar para GWT pero tanto su título y las etiquetas no dicen GWT).

    De hecho tengo una custom RabbitMQ mensaje simple contenedor que creará automáticamente de la cola de los enlaces y en los mensajes recibidos que enviará a la Guayaba EventBus. Su increíble elegante y escalas magníficamente.

    Usted puede fácilmente hacer uso de su DI marco para registrar los Suscriptores. Para la Primavera de crear BeanPostProcessor que se registra de forma automática los frijoles con @Subscribe.

    A continuación es la Primavera BeanPostProcessor:

    package com.snaphop.spring;
    
    import java.lang.reflect.Method;
    
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.config.BeanPostProcessor;
    import org.springframework.stereotype.Component;
    
    import com.google.common.eventbus.EventBus;
    import com.google.common.eventbus.Subscribe;
    
    @Component
    public class EventBusBeanPostProcessor implements BeanPostProcessor {
    
        private EventBus eventBus;
    
        @Override
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            if (isApplicable(bean)) {
                eventBus.register(bean);
            }
            return bean;
        }
    
        @Override
        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            return bean;
        }
    
        protected boolean isApplicable(Object bean) {
            for(Method m : bean.getClass().getMethods()) {
                if (m.isAnnotationPresent(Subscribe.class))
                    return true;
            }
            return false;
        }
    
        @Autowired
        public void setEventBus(EventBus eventBus) {
            this.eventBus = eventBus;
        }
    
    }

    Estoy seguro de que es trivial para hacer algo similar en Guice.

    • He tratado de usar google guayabas bus de eventos y se quedó atascada porque utiliza referencias fuertes a los oyentes. Quería usarlo en una primavera de medio ambiente y solo cosas de todos los granos en ella con un post procesador. Esto no funcionará con guayaba. He creado mi propia solución, que está alojado en github github.com/bennidi/mbassador. Es muy estable ahora (utilizado en la producción de la mitad de un año) y es más rápido que el de google autobús. También ofrece más características, pero es tan fácil de usar.
    • Hice mi propia implementación del mismo modo, pero principalmente debido a que la Guayaba se utiliza JULI y no me gusta la captura de la excepción. Voy a tener que retirar el tuyo… también me di cuenta de que la Guayaba se utiliza una colección de Clase<?> potencial que puede conducir a permgen fugas.
    • ¿Qué significa para ti la colección de la Clase<?> podría conducir a permgen fugas? Además, realmente agradecería Comentarios sobre MBassador. Si se carece de una característica con la que se podría requerir que usted puede presentar un problema en github.
    • En realidad, explícita comprobación de @Suscribirse Anotaciones no es necesario con la Guayaba EventBus: github.com/google/guava/wiki/…
  2. 4

    Si se está utilizando la Primavera ya, luego de una mano tipo de característica oculta de la Primavera es el ApplicationEventMulticaster de la interfaz, que es una API muy sencilla para publicar y suscribirse a generado por la aplicación de los acontecimientos. Las implementaciones utilizan el TaskExecutor marco, lo que significa que se puede sincronizar o async como se desee. Además, cada ApplicationContext tiene un publishEvent método, por lo que es cómicamente fácil de configurar para la Primavera-clases administradas.

    Así que sí, si ya el uso de la Primavera, no hay necesidad de para otra utilidad para hacer esto, está construido en el ya.

    • +1: muchas gracias. No voy a utilizar la Primavera, pero yo siempre valor de una buena información.
  3. 0

    No se si es realmente ligero. Pero no se ajuste al resto de su descripción: ActiveMQ

    • Yo sé acerca de AMQP soluciones basadas en: (1) no ligero (por supuesto es relativo 😉 (2) realmente no es aplicable para un GWT basado en proyecto.
    • ah bien… todo tiene que ejecutar en el mismo proceso en el navegador? Sí, en ese caso ignorar esta idea ;^)
    • a continuación, eliminarlo, como es probable que obtener algunas de votos en algún momento (no de mí).
    • Ellos tienden a hacer eso. ;^) Mi solución equivocada agregar a la conversación para cualquier otra persona que podría haber llegado con la misma respuesta
    • hágalo a su manera, a continuación,. Saludos 🙂
    • sólo se necesita este conector para gwt. code.google.com/p/gwt-activemq

  4. 0

    Tal vez usted podría tratar algunos de jabber (XMPP) basado en la solución. ¿Qué acerca de openfire?

    • ¿es en serio? no es porque yo no hacia abajo-votos (a menudo) de que uno puede abuso de aquí!
    • jldupont: sí, hablo en serio. Y no puedo entender por qué usted considere mi comentario como un abuso. Si usted piensa que es una solución equivocada, puesto que algunos argumentos sobre la mesa. 😉
    • en realidad xmpp es bastante fresco, pero quizá tiene demasiado trabajo

Kommentieren Sie den Artikel

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