1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/nepxion-EventBus

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Nepxion EventBus — это компонент событийной шины, основанный на универсальном механизме рассылки событий Google Guava. Он использует механизм АОП Spring Framework и предоставляет возможность вызова через аннотации, поддерживая асинхронный и синхронный режимы работы.

Основные функции:

  • реализация механизма EventBus с использованием аннотации @EventBus;
  • поддержка асинхронного режима по умолчанию: события принимаются в дочернем потоке, а режим (синхронный или асинхронный) можно изменить с помощью аннотации @EventBus(async = false);
  • возможность массовой рассылки событий;
  • работа в синхронном режиме: события принимаются в основном потоке;
  • использование технологии изоляции потоков и настройка пула потоков;
  • гибкость в работе с объектами событий: можно публиковать и подписываться на события базовых типов Java, использовать встроенные типы событий фреймворка или создавать собственные пользовательские типы.

Совместимость: последняя версия совместима с Spring 4.x.x и Spring Boot 1.x.x, а также с Spring 5.x.x и Spring Boot 2.x.x.

Зависимости:

<dependency>
    <groupId>com.nepxion</groupId>
    <artifactId>eventbus-aop-starter</artifactId>
    <version>${eventbus.version}</version>
</dependency>

Использование:

@SpringBootApplication
@EnableEventBus
public class MyApplication {
}

Стратегия EventBus основана на контроллере событий (Controller).

  1. Один контроллер может управлять событиями EventBus по умолчанию с идентификатором «default», определённым внутри Google Guava. На стороне публикации:
eventControllerFactory.getAsyncController().post("abc"); // асинхронная отправка
eventControllerFactory.getSyncController().post("abc");  // синхронная отправка

На стороне подписки:

@EventBus // подписка на асинхронные сообщения, async не указано, по умолчанию true
public class MySubscriber {
}
@EventBus(async = false) // подписка на синхронные сообщения
public class MySubscriber {
}
  1. Несколько контроллеров могут управлять различными событиями EventBus. На стороне публикации:
eventControllerFactory.getAsyncController(identifier).post("abc"); // асинхронная отправка
eventControllerFactory.getSyncController(identifier).post("abc");  // синхронная отправка

На стороне подписки:

@EventBus(identifier = "xyz") // подписка на асинхронные сообщения, async не указано, по умолчанию true
public class MySubscriber {
}
@EventBus(identifier = "xyz", async = false) // подписка на синхронные сообщения
public class MySubscriber {
}

Обратите внимание, что идентификатор на стороне публикации и на стороне подписки должен совпадать. Текст запроса:

«В запросе скорее всего текст технической направленности из области разработки и тестирования программного обеспечения».

Перевод текста на русский язык:

События интерфейса диспетчеризации событий должны соответствовать параметрам @EnableEventBus, иначе события не будут получены.

eventControllerFactory.getSyncController(identifier) должен соответствовать @EnableEventBus.

eventControllerFactory.getSyncController().post("Sync Event String Format");

// В асинхронном режиме (по умолчанию) дочерний поток получает отправленное событие. eventControllerFactory.getAsyncController().post(12345L);

// В синхронном режиме основной поток получает отправленное событие.

Событие интерфейса диспетчеризации должно соответствовать параметру @EnableEventBus, иначе событие не будет получено.

eventControllerFactory.getSyncController().post(Boolean.TRUE);

// В асинхронном режиме (по умолчанию), дочерний поток получает отправленное событие. eventControllerFactory.getAsyncController().postEvent(new Event("Async Event"));

// В синхронном режиме основной поток получает отправленное событие.

Событие интерфейса диспетчеризации должно соответствовать параметру @EnableEventbus, иначе событие не будет получено.

eventControllerFactory.getSyncController().postEvent(new Event("Sync Event"));

Главный вход:

package com.nepxion.eventbus.example;

/**
 * <p>Title: Nepxion EventBus</p>
 * <p>Description: Nepxion EventBus AOP</p>
 * <p>Copyright: Copyright (c) 2017-2050</p>
 * <p>Company: Nepxion</p>
 * @author Haojun Ren
 * @version 1.0
 */

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

import com.nepxion.eventbus.annotation.EnableEventBus;
import com.nepxion.eventbus.example.service.MyPublisher;

@SpringBootApplication
@EnableEventBus
public class MyApplication {
    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(MyApplication.class, args);

        MyPublisher myPublisher = applicationContext.getBean(MyPublisher.class);
        myPublisher.publish();
    }
}

Результат выполнения:

2018-06-25 13:01:02.008 INFO [main][com.nepxion.eventbus.example.service.MyPublisher:28] — отправка события...

2018-06-25 13:01:02.015 INFO [EventBus-192.168.0.107-thread-0][com.nepxion.eventbus.example.service.MySubscriber1:27] — дочерний поток принимает асинхронное событие — Sync Event String Format, тип String.

2018-06-25 13:01:02.016 INFO [main][com.nepxion.eventbus.example.service.MySubscriber2:27] — основной поток принимает синхронное событие — Sync Event String Format, тип String.

2018-06-25 13:01:02.016 INFO [main][com.nepxion.eventbus.example.service.MySubscriber2:37] — основной поток принимает синхронное событие — true, тип Boolean.

2018-06-25 13:01:02.016 INFO [EventBus-192.168.0.107-thread-1][com.nepxion.eventbus.example.service.MySubscriber1:32] — дочерний поток принимает асинхронное событие — 12345, тип Long.

2018-06-25 13:01:02.017 INFO [EventBus-192.168.0.107-thread-2][com.nepxion.eventbus.example.service.MySubscriber1:42] — дочерний поток принимает асинхронное событие — com.nepxion.eventbus.core.Event@67ca8c1f[source=Async Event], тип Event.

2018-06-25 13:01:02.017 INFO [main][com.nepxion.eventbus.example.service.MySubscriber2:42] — основной поток принимает синхронное событие — com.nepxion.eventbus.core.Event@1bcf67e8[source=Sync Event], тип Event.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/nepxion-EventBus.git
git@api.gitlife.ru:oschina-mirror/nepxion-EventBus.git
oschina-mirror
nepxion-EventBus
nepxion-EventBus
master