在我的开发中,经常有以下场景

  • 指令传递。对一个正在运行的程序,在不重启的情况下更新其运行参数/行为
  • 信息互通。两个运行中的程序进行数据交换,这两个程序可能来自不同的编程语言

基于 Redis 队列去进行消息互通是个不错的选择,实现简单,运行高效。

原理

  • 利用 Redisblpop 的阻塞特性等待消息
  • 发送者生成唯一 SessionID,存储相关参数,并将 SessionID 发送给接收者,同时自己作为一个接收者等待消息回复;(实际上,当发送者仅上报消息无需回复时,可选择不等待)
  • 接收者收到 SessionID,获取相关参数,而后进行任务处理,回复消息给发送者(可在任务处理之前,也可在之后)
  • 发送者收到接收者的消息回复后,本次通信结束

Python 实现

PHP 实现

其他语言

  • 参考上述实现,编写少量的代码即可实现相应版本

扩展

通常来说,接收者角色为「服务器」,发送者角色为「客户端」;故接收者往往是一个循环队列;对 FCMessenger 加以利用,可实现一个基于 Redis 的「服务器」。《基于 Redis 的「服务器」实现》