message-trunk — это легковесная Java-разработка для фреймворка обмена сообщениями.
Цель разработки фреймворка: создать легковесную систему очередей сообщений для проектов.
Цели разработки: внутри проектов часто требуется выполнять асинхронные операции. Обычно такие задачи передаются в пул потоков, что может привести к следующим проблемам:
Для решения этих проблем на основе очереди Redis была разработана эта система очередей сообщений, которая имеет следующие особенности:
Maven-зависимость:
<!-- https://mvnrepository.com/artifact/wang.moshu/mt-framework -->
<dependency>
<groupId>wang.moshu</groupId>
<artifactId>mt-framework</artifactId>
<version>0.0.2</version>
</dependency>
Запустите mt-demo и откройте index.jsp для запуска тестового примера. Адрес демонстрации: Простой тест: http://123.206.202.189:8080/mt-demo/index.jsp Тест производительности (1 ядро, 1 ГБ на небольшом компьютере, пожалуйста, не тестируйте производительность, уже было много сбоев, загрузите на компьютер для тестирования производительности): http://localhost:8080/mt-demo/index-benchmark.jsp
message-trunk доступен под лицензией Apache, см. файл LICENSE для получения дополнительной информации.
Получите глобальный объект MessageTrunk очереди сообщений (можно использовать Spring для внедрения), затем добавьте сообщение.
// Получение экземпляра MessageTrunk
MessageTrunk mt = (MessageTrunk) SpringBeanUtils.getBean("messageTrunk");
Message<DemoMessage> message = new Message<DemoMessage>(MessageType.DEMO_MESSAGE, new DemoMessage(value));
// Добавление сообщения в MT
mt.put(message);
Обработчик сообщений: наследуйте абстрактный класс AbstarctMessageHandler.
public class DemoHandler extends AbstarctMessageHandler<DemoMessage>
{
private static Log logger = LogFactory.getLog(DemoHandler.class);
public DemoHandler()
{
// Указать тип сообщения, отслеживаемый этим обработчиком
super(MessageType.DEMO_MESSAGE);
}
/**
* Метод обработки сообщения после его прослушивания
*/
@Override
public void handle(DemoMessage message)
{
// do handle
}
@Override
public void handleFailed(DemoMessage obj)
{
// handle failed
}
}
Основной принцип заключается в использовании блокирующей команды Redis Blpop. Эта команда удаляет и получает первый элемент списка. Если список пуст, команда будет заблокирована до тех пор, пока не истечёт время ожидания или не появится доступный для удаления элемент.
Тестовая среда: машина разработчика, 4 ядра i5, 16 ГБ памяти, tomcat и redis на одной машине
Результаты теста: максимальная скорость записи сообщений составляет 57208 операций в секунду.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )