参考
https://www.cnblogs.com/uniqueDong/p/15904837.html
https://www.cnblogs.com/wzh2010/p/17205390.html
https://blog.youkuaiyun.com/qq_16557637/article/details/121015736
https://developer.aliyun.com/article/1095035
https://blog.youkuaiyun.com/sco5282/article/details/132904956
消息队列
消息队列可以实现消息解耦、消息路由、异步处理、流量削峰填谷。主流消息队列有kafka, rabbitmq, rocketmq
。
Redis也可以实现消息队列。方式有
- list
- pub/sub
- stream
list
redis的list底层是链表,满足先进先出。
list实现队列比较方便。同时可以满足有序,消息去重。缺点是
- 没有订阅功能,消费者要主动查询队列。而为了避免频繁查询队列消耗CPU资源,可以采用阻塞式查询。redis中阻塞查询命令是
brpop
。 - 无法保证可靠性。缺少消息确认机制,无法及时感知遗漏消息,导致数据不一致。
源码
完整项目在https://gitcode.com/zsss1/redis_mq/overview
在pom.xml
添加redisson
依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.40.2</version>
</dependency>
Redission
封装依赖。
@SpringBootTest(classes = DemoApplication.class)
public class RedisListTest {
@Autowired
private RedissonClient client;
private static final String REDIS_QUEUE = "list_queue";
private static final Logger LOGGER = LoggerFactory.getLogger(RedisListTest.class);
@Test
public void test_redis_list_mq() throws Exception {
RedissonBlockingDeque r;
new Thread(() -> {
for (