Дистрибьютор (часто используемые распределённые компоненты)
Распределённые технологии повысили эффективность работы системы, но также создали новые проблемы (например, распределённая блокировка, глобальный уникальный идентификатор и т. д.).
Эти проблемы не могут быть решены напрямую с помощью собственных технологий Java, но они необходимы в распределённой системе.
Дистрибьютор основан на Redis для реализации часто используемых распределённых компонентов, он прост, надёжен и готов к использованию.
Добро пожаловать на мой личный веб-сайт.
Инициализация дистрибьютора:
// Получение экземпляра
Distributor distributor = Distributor.getInstance();
/* Конфигурация подключения (можно выбрать разные способы конфигурации в зависимости от реальной ситуации)
Можно выбрать различные способы настройки в соответствии с фактическими условиями */
// Конфигурация 1: хост + порт + пароль (если есть) + конфигурация пула соединений по умолчанию
distributor.initJedisConfig("xxx", 6379, "");
// Конфигурация 2: хост + порт + пароль + пользовательская конфигурация пула подключений
distributor.initJedisConfig(String host, int port, String auth, JedisPoolConfig jedisPoolConfig);
// Конфигурация 3: пользовательский пул подключений
distributor.initJedisConfig(JedisPool jedisPool);
Освобождение ресурсов дистрибьютора:
// Освобождение ресурсов, вызов при завершении использования
distributor.destory();
Использование блокировки:
// Получить объект блокировки, указать только имя блокировки
ILock lock = Distributor.newRedisLock("myLock");
// Также можно вручную указать срок действия блокировки
ILock lock = Distributor.newRedisLock("myLock", 2000);
/* Есть три способа блокировки */
// 1. Метод lock(), блокируется до тех пор, пока блокировка не будет успешно получена
String lockId = lock.lock();
// 2. Метод tryLock(), попытка получить блокировку, возврат через 2 секунды, если не удалось
String lockId = lock.tryLock();
// 3. Метод tryLock(long tryLockTime, TimeUnit unit), попытка получения блокировки, указание времени попытки
String lockId = lock.tryLock(2000, TimeUnit.MILLISECONDS);
// ----> Обработка бизнес-логики
// Наконец, снять блокировку
lock.unLock(lockId);
Создание глобального уникального идентификатора:
/* Если используется генератор последовательностей на основе алгоритма снежинки, то нет необходимости инициализировать Redis
Просто создайте его, и вы можете использовать его
Также поддерживается пользовательский рабочий ID и ID центра обработки данных */
// Метод инициализации 1
ISequence sequence = Distributor.newSnowflakeSeq();
// Инициализационный метод 2
ISequence sequence = Distributor.newSnowflakeSeq(long workerId, long datacenterId);
// Можно сразу получить id
long id = sequence.nextId();
/* Если вы используете генератор последовательностей Redis, вам необходимо сначала инициализировать Distributor
Вы можете обратиться к примеру инициализации выше, а затем создать его, чтобы использовать */
// Способ инициализации 1: указать только ключ
ISequence sequence = Distributor.newRedisSeq("seq");
// Способ инициализации 2: указать ключ, длину шага, начальное значение
ISequence sequence = Distributor.newRedisSeq(String key, int step, long stepStart);
Ограничение потока:
/* Поскольку используется Redis, обратитесь к разделу инициализации для получения экземпляра
И настройте соединение Redis */
// Получаем ограничитель потока
ILimit limit = Distributor.newAccessLimit();
// Ограничение потока, возвращает true, если ограничение потока не превышено, иначе возвращает false
// Три параметра означают: ключ Redis, количество выполнений за единицу времени, единица времени
limit.accessLimit("limit", 2, 1)
Код теста можно найти в тестовом классе (src/test).
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )