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

OSCHINA-MIRROR/1028125449-message-trunk

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 5.9 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 02.12.2024 07:27 8d726d8

Message-trunk

message-trunk — это легковесная Java-разработка для фреймворка обмена сообщениями.

Цель разработки фреймворка: создать легковесную систему очередей сообщений для проектов.

Цели разработки: внутри проектов часто требуется выполнять асинхронные операции. Обычно такие задачи передаются в пул потоков, что может привести к следующим проблемам:

  • размер пула потоков не контролируется, и задачи могут быть отброшены, если пул заполнен;
  • нет механизма повторных попыток при сбое выполнения задач;
  • нет унифицированного механизма обработки исключений при сбое выполнения задач.

Для решения этих проблем на основе очереди Redis была разработана эта система очередей сообщений, которая имеет следующие особенности:

  • достаточно легковесна, проста в настройке очереди, требуется только 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>

DEMO

Запустите mt-demo и откройте index.jsp для запуска тестового примера. Адрес демонстрации: Простой тест: http://123.206.202.189:8080/mt-demo/index.jsp Тест производительности (1 ядро, 1 ГБ на небольшом компьютере, пожалуйста, не тестируйте производительность, уже было много сбоев, загрузите на компьютер для тестирования производительности): http://localhost:8080/mt-demo/index-benchmark.jsp

Требования

  • Java 6.0+

Лицензия

message-trunk доступен под лицензией Apache, см. файл LICENSE для получения дополнительной информации.

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

1. Добавление сообщения в очередь

Получите глобальный объект 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);

2. Обработка сообщения

Обработчик сообщений: наследуйте абстрактный класс 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 )

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

1
https://api.gitlife.ru/oschina-mirror/1028125449-message-trunk.git
git@api.gitlife.ru:oschina-mirror/1028125449-message-trunk.git
oschina-mirror
1028125449-message-trunk
1028125449-message-trunk
master