RedisMQ
Ссылка, на основе которой были добавлены логика надёжных сообщений и логики уничтожения при отсутствии потребителей.
Три варианта реализации очередей сообщений в Redis с использованием списков, потоков и Pub/Sub.
Четыре варианта реализации очередей сообщений на базе Redis.
Данный модуль представляет собой модуль, использующий список Redis для реализации очередей сообщений, а также обеспечивающий надёжность сообщений. Проект основан на платформе Spring Boot и использует функции RedisTemplate
, предоставляемые Spring, для доступа к сервису Redis.
Добавить конфигурацию:
spring:
redis:
message-queue:
producer: true # Включить режим производителя RedisMQ
consumer: true # Включить режим потребителя RedisMQ
Пример кода для отправки сообщений:
@Log4j2
@RestController
@RequiredArgsConstructor
public class RedisMQController {
private final RedisMQSender redisMQSender;
@GetMapping("hello3")
public String send3() {
for (int i = 0; i < 50000; i++) {
if (i % 2 == 0) {
redisMQSender.send(RedisMQConstant.TEST_QUEUE, String.valueOf(i));
} else {
redisMQSender.send(RedisMQConstant.TEST_QUEUE_2, String.valueOf(i));
}
if (i == 25000) {
System.out.println(i);
}
}
return "";
}
}
Пример кода для обработки сообщений:
Создаётся класс
RedisMQListenerContainer
для определения методов обработки сообщений Redis. Для реализации прослушивания сообщений очереди Redis в методе, управляемом контейнером Spring, необходимо добавить аннотацию@RedisMQListener(имя очереди)
. Имя очереди должно быть строкой и не может быть пустым, оно указывает, какие сообщения должен обрабатывать метод. Обратите внимание, что метод, помеченный@RedisMQListener
, может содержать только один параметр, который может быть объектом, реализующим интерфейсjava.io.Serializable
, или параметром типа оболочки, либо параметром универсального типаRedisMQMessage
.
@Log4j2
@Component
public class RedisMQListenerContainer {
@RedisMQListener(RedisMQConstant.TEST_QUEUE)
public void dealRedisMessage0(RedisMQMessage message) {
log.info("dealRedisMessage0收到queue-1队列消息: {}", message);
}
@RedisMQListener(RedisMQConstant.TEST_QUEUE)
public void dealRedisMessage1(String message) {
log.info("dealRedisMessage0收到queue-1队列消息: {}", message);
}
@RedisMQListener(RedisMQConstant.TEST_QUEUE_2)
public void dealRedisMessage2(RedisMQMessage<String> message) {
log.info("dealRedisMessage0收到queue-2队влея сообщение: {}", message);
}
}
Примечание: Можно определить несколько методов с аннотацией @RedisMQListener(имя очереди)
, и все они могут обрабатывать сообщения из одной и той же очереди. Однако если одно и то же сообщение будет получено несколькими методами, оно будет обработано несколько раз. В распределённой кластерной среде разные службы, прослушивающие одну и ту же очередь, будут обрабатывать каждое сообщение только один раз.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )