Redis消息隊列
同學們是否有過類似開發過程中的糾結?
- 項目太小,不想引入MQ,但又想實現異步任務?
- 初來乍到只會用Redis,MQ暫時不懂,還要學習,不太會用,就想怎麼簡單怎麼來。
- 分佈式下,就想把日誌統一收集起來,寫在某個地方。
那麼Redis就可以做到,實現一個超級簡單的消息隊列。
當然第一種情況,單機版的@Async就可以了,也不需要MQ和Redis
廢話不多說,直接上碼:
消費:
配合CommandLineRunner 直接實現開機監聽
blpop是redis的阻塞函數,也就是說沒有消息,就一直等待。
@Component public class StartupRunner implements CommandLineRunner { private Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private RedisUtil redisUtil; @Override public void run(String... args) throws Exception { logger.info("**************Application startup successful*************"); while (true){ String message= redisUtil.blpop("queueMessage"); logger.info("收到了隊列:{},的消息:{}","queueMessage",message); } } }
生產隊列消息:
lpush
@ApiOperation(value = "消息發送") @RequestMapping(value = "/pushMessage", method = RequestMethod.POST) public GeneralResponseDto pushMessage(@RequestParam("message") String message) throws IOException { redisUtil.lpush("queueMessage",message); return GeneralResponseDto.addSuccess("發送成功", message); }
測試:
同學們有靈感了嗎,某些場景還是很方便的哦。