基于 Redis 的应用间通信
在我的开发中,经常有以下场景
- 指令传递。对一个正在运行的程序,在不重启的情况下更新其运行参数/行为
- 信息互通。两个运行中的程序进行数据交换,这两个程序可能来自不同的编程语言
基于 Redis 队列去进行消息互通是个不错的选择,实现简单,运行高效。
原理
- 利用
Redis
中blpop
的阻塞特性等待消息 - 发送者生成唯一
SessionID
,存储相关参数,并将SessionID
发送给接收者,同时自己作为一个接收者等待消息回复;(实际上,当发送者仅上报消息无需回复时,可选择不等待) - 接收者收到
SessionID
,获取相关参数,而后进行任务处理,回复消息给发送者(可在任务处理之前,也可在之后) - 发送者收到接收者的消息回复后,本次通信结束
Python 实现
PHP 实现
其他语言
- 参考上述实现,编写少量的代码即可实现相应版本
扩展
通常来说,接收者角色为「服务器」,发送者角色为「客户端」;故接收者往往是一个循环队列;对 FCMessenger
加以利用,可实现一个基于 Redis 的「服务器」。《基于 Redis 的「服务器」实现》