Saka JavaWeb: событийная шина
Saka — это простая событийно-ориентированная библиотека, поддерживающая отправку сообщений по схеме «один к одному», «один ко многим» и «многие ко многим». В настоящее время проект находится в версии 1.0 и находится в разработке. Более подробные инструкции по использованию будут опубликованы позже.
Использование:
Добавьте зависимости.
Пожалуйста, дождитесь загрузки в репозиторий.
С нетерпением ждём загрузки!
Используйте аннотации для маркировки объектов и исполнителей. (Обратите внимание, что в настоящее время поддерживается только приём без параметров или с одним параметром, приём нескольких параметров не поддерживается.)
Используйте @SakaSService
, чтобы внедрить этот объект в контейнер Spring.
Используйте @SakaSubscribe
, чтобы объявить метод как получатель.
| Параметр | Описание | Значение по умолчанию | Примечание |
|-----|----|-----|-----|
| debug | Режим отладки | false | В режиме отладки будет выводиться журнал |
| order | Установить порядок приоритета | 5 | Чем меньше число, тем выше приоритет, выполняется раньше |
Вот три основных примера приёмников:
/**
* Реализовать приёмник сообщений
*
* <p>Использовать @SakaService для внедрения в контейнер Spring
*
* <p>Используйте @SakaSubscribe, чтобы отметить этот приёмник
*
* @author tao
*/
@SakaService
public class BaseService {
/** Автоматическое внедрение тестового объекта */
@Autowired SpeakService speakService;
/** Без параметров */
@SakaSubscribe
public void sendEmpty() {
speakService.speak();
System.out.println("exec sendEmpty ");
}
/** С одним параметром */
@SakaSubscribe
public void sendString(String message) {
speakService.speak();
System.out.println("exec sendString = " + message);
}
/** С параметром пользовательского типа */
@SakaSubscribe
public void sendClassObject(Message message) {
speakService.speak();
System.out.println("exec sendClassObject = " + message.getName());
}
}
Внедрите SakaSendClient.
Saka автоматически внедряет ISakaClient в контекст Spring при запуске приложения. В проекте SpringBoot можно использовать следующий код для автоматического внедрения Bean-объекта.
@RestController
public class TestController {
/** Автоматически внедрить SakaClient */
@Autowired
SakaSendClient sakaSendClient;
}
Отправьте сообщение с помощью клиента.
После внедрения SakaClient отправьте сообщение, используя методы send() или send(Object).
@RestController
public class TestController {
/** Автоматически внедрить SakaClient */
@Autowired SakaSendClient sakaSendClient;
/**
* Попытка отправить строковое сообщение
*
* @param name
* @return
* @throws Exception
*/
@GetMapping("/string/{name}")
public String sendString(@PathVariable("name") String name) throws Exception {
sakaSendClient.send(name);
return name;
}
/**
* Попытаться отправить сообщение пользовательского типа
*
* @param message
* @return
* @throws Exception
*/
@GetMapping("/message/{message}")
public String sendMessage(@PathVariable("message") String message) throws Exception {
Message messageObject = new Message().setName(message).setAge(12);
sakaSendClient.send(messageObject);
return messageObject.getName();
}
/**
* Попытка отправки пустого сообщения
*
* @return
* @throws Exception
*/
@GetMapping("/empty")
public String sendEmpty() throws Exception {
sakaSendClient.send();
return "success";
}
}
Просмотрите журналы отправки сообщений на консоли.
Используйте параметр debug аннотации @SakaSubscribe
для настройки вывода журнала, по умолчанию он не выводится.
//Saka регистрирует приёмники
Saka ------> Добавить методы execCommand(1) в Saka
Saka ------> Добавить методы sendClassObject(1) в Saka
Saka ------> Добавить методы printMessage(0) в Saka
Saka ------> Добавить методы speak(0) в Saka
//Saka отправляет сообщения
Saka ------> Отправить данные в testMethodes1 успешно
Saka ------> Saka успешно отправил данные 1 раз.
Saka --------> Saka успешно отправил данные 1 раз.
Saka ------> Saka успешно отправил данные 1 раз.
Включите порядок выполнения приоритетов.
При настройке приёмника с помощью аннотации @SakaSubscribe
вы можете установить приоритет order. Если значение не задано, используется значение по умолчанию OrderConstance.ORDER_NORMALE (5). Чем меньше число, тем выше приоритет и тем раньше оно будет выполнено. Как показано ниже:
@SakaSubscribe(debug = true,order = OrderConstance.ORDER_HIGHT)
public void execCommand(String message) {}
/** Приёмник с одним параметром */
@SakaSubscribe(debug = true,order = OrderConstance.ORDER_HIGHT)
public void execCommand(String message) {}
/** Приёмник с параметром пользовательского типа */
@SakaSubscribe(order = OrderConstance.ORDER_LOWWER)
public void sendClassObject(Message message) {}
Кроме того, учитывая производительность, последовательное выполнение приёмников по умолчанию отключено. Вы можете включить эту функцию через файл конфигурации приложения.
saka.sequence-execute=true
saka:
sequence-execute: true
В некоторых случаях вы можете настроить прослушиватель для реализации мониторинга состояния выполнения приёмника. Вам нужно только внедрить объект прослушивания в контейнер Spring, и этот Bean должен наследовать интерфейс HandleSubscribeListener. Например:
@Bean
public HandleSubscribeListener handleSubscribeListener(){
return new HandleSubscribeListener() {
//TODO вернуть результат выполнения
@Override
public
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )