Ответ 1
Посмотрите eventbus.
(Ссылка исправлена, благодаря jldupont, чтобы указать на это).
В ближайшем будущем я начну небольшой проект Java (GWT), и я нахожусь на этапе "сбора информации".
Q: Есть ли в Java библиотека сообщений с легким доступом?
Мои требования также легки: -)
Обновление: похоже, что GWT теперь поддерживает интегрированную шину событий.
Посмотрите eventbus.
(Ссылка исправлена, благодаря jldupont, чтобы указать на это).
Я знаю, что это старый вопрос, но я думаю, что более современным решением является использование Guava Event Bus ( что я не уверен, что он будет работать для GWT, но оба заголовка и теги не говорят GWT).
На самом деле у меня есть собственный простой контейнер сообщений RabbitMQ, который автоматически создаст привязки очередей и при полученных сообщениях будет отправлен в Guava EventBus. Его невероятная элегантность и весы великолепно.
Вы можете легко использовать свою инфраструктуру DI для регистрации подписчиков. Для Spring я создаю BeanPostProcessor, который автоматически регистрирует beans с помощью @Subscribe
.
Ниже показан Spring 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;
}
}
Я уверен, что тривиально делать что-то подобное в Guice.
Если вы уже используете Spring, то удобной функцией скрытого скрытия Spring является ApplicationEventMulticaster, который является очень простым API для публикации и подписки на события, созданные приложением. В реализациях используется структура TaskExecutor
, что означает, что они могут синхронизироваться или асинхронно по желанию. Кроме того, каждый ApplicationContext
имеет метод publishEvent
, поэтому его легко настроить для Spring -установленных классов.
Итак, если вы уже используете Spring, нет необходимости для другой утилиты, чтобы сделать это, он уже встроен.
Не уверен, что он действительно легкий. Но это полностью соответствует вашему описанию: ActiveMQ
Возможно, вы можете попробовать решение на основе jabber (XMPP). Как насчет openfire?