Nepxion EventBus — это компонент событийной шины, основанный на универсальном механизме рассылки событий Google Guava. Он использует механизм АОП Spring Framework и предоставляет возможность вызова через аннотации, поддерживая асинхронный и синхронный режимы работы.
Основные функции:
Совместимость: последняя версия совместима с 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).
eventControllerFactory.getAsyncController().post("abc"); // асинхронная отправка
eventControllerFactory.getSyncController().post("abc"); // синхронная отправка
На стороне подписки:
@EventBus // подписка на асинхронные сообщения, async не указано, по умолчанию true
public class MySubscriber {
}
@EventBus(async = false) // подписка на синхронные сообщения
public class MySubscriber {
}
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 )