Простая реализация Redisson Spring Boot Starter, основанная на Spring Messaging, для упаковки очереди и отложенной очереди Redisson. Предоставлен шаблон операций для отправки сообщений в очередь и потребитель, реализованный с помощью аннотаций.
В повседневной разработке часто встречаются сценарии, требующие очень точного времени задержки. Обычные решения не имеют функции отложенных сообщений или обеспечивают неточное время задержки. Например, RabbitMQ может имитировать отложенные сообщения с помощью очереди недоставленных сообщений, но эта очередь является блокирующей. RocketMQ предоставляет возможность отправлять отложенные сообщения, и сообщения не блокируются, но тестирование показало, что задержка не всегда точна, иногда погрешность составляет секунды.
Исследование показало, что Redisson реализовал отложенные очереди на основе Redis, обеспечивая точность задержки на миллисекундном уровне. На основе этого сценария соответствующие компоненты Spring были использованы для упаковки, чтобы упростить использование в приложениях Spring.
Java 1.8 Spring 5.0.10 Spring Boot 2.0.6
<dependency>
<groupId>io.gitee.the-best-riven</groupId>
<artifactId>smart-redisson-spring-boot-starter</artifactId>
<version>1.1.4-beta.1</version>
</dependency>
<dependency>
<groupId>com.riven</groupId>
<artifactId>smart-redisson-spring-boot-starter</artifactId>
<version>1.0.0.RELEASE</version>
<scope>system</scope>
<systemPath>***</systemPath>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId>
<version>5.0.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.11.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.60</version>
</dependency>
<dependency>
<groupId>com.riven</groupId>
<artifactId>smart-redisson-spring-boot-starter</artifactId>
<version>1.1.3-beta.1</version>
</dependency>
До версии 1.1.4-beta.1 groupId был com.riven, из-за требований проверки центрального репозитория Maven. После публикации версии 1.1.4-beta.1 в центральный репозиторий Maven groupId был изменён на io.gitee.the-best-riven.
spring:
smart-redisson:
#server-type: single
#server-address: localhost:6379
server-type: cluster
server-address: localhost:7000,localhost:7001,localhost:7002
password: 123456
По умолчанию Redis-сервис представляет собой один экземпляр (single), а адрес подключения — localhost:6379. После завершения настройки можно использовать RedissonClient через контейнер Spring.
@Bean
public RedissonQueue redissonQueue() {
return new RedissonQueue("riven", true, null, messageConverter());
}
При создании очереди можно указать имя очереди, тип очереди (с задержкой или нет), стратегию изоляции и конвертер сообщений. Стратегия изоляции применяется в следующих сценариях: в кластерном режиме службы, если предположить, что есть три машины A, B и C, машина A хочет потреблять только сообщения, созданные машиной A. Это называется изоляцией, и её можно достичь, указав стратегию изоляции кластера. Исходный код предоставляет DefaultIsolationStrategy, который можно использовать при необходимости. Конвектор сообщений используется для преобразования сообщений и дополнительной обработки, такой как добавление заголовков сообщений.
@Autowired
private RedissonTemplate redissonTemplate;
public void test() {
CarLbsDto carLbsDto = new CarLbsDto();
carLbsDto.setCid(1);
carLbsDto.setBusinessType("0");
carLbsDto.setCity("北京市");
carLbsDto.setCityId(265);
carLbsDto.setName("fsfds");
carLbsDto.setCarNum("156156");
redissonTemplate.sendWithDelay("riven", carLbsDto, 5000);
}
Откройте @EnableRedisson в классе запуска Spring и создайте следующий класс:
@Configuration
public class RedissonTestApplication {
@Bean("myMessageConverter")
public MessageConverter messageConverter() {
return new MessageConverter() {
@Override
public QueueMessage<?> toMessage(Object object, Map<String, Object> headers) throws MessageConversionException {
//do something you want, eg:
headers.put("my_header", "my_header_value");
return QueueMessageBuilder.withPayload(object).headers(headers).build();
}
@Override
public Object fromMessage(RedissonMessage redissonMessage) throws MessageConversionException {
byte[] payload =
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )