概述
### 背景
* 搭建一个电商数据中台,统一管理各个平台的商品,订单等基本数据。
### 需求
* 日后可能会有很多订单。上传的商品也可能会一次性上传很多个。
### 方案
* 使用redis发布订阅模式,让上传商品,下载订单异步执行
* 记录发布的任务,以及任务的执行情况,避免某一平台上传失败时,发生漏上传的错误,或者是未接收到订阅消息,任务执行失败。
* 对未执行的任务,或者执行失败的任务,进行重发任务。
### 具体实现
1. 发布消息
消息体可以根据自己业务具体定义
```
/**
* 推送广播
*
* @param array $message = [
* 'event' => 'upload_goods',
* 'data' => [],
* 'broadcast_id' => '1',
* ]
*
* @time : 2020/9/11
*/
public function publish(array $message)
{
$log = $this->createLog($message['event'], $message['pid']);
$message['broadcast_id'] = $log->id;
$this->message = $message;
//发送广播消息
$this->sendMessage();
}
/**
* 发送消息
*
* @time : 2020/9/11
*/
protected function sendMessage()
{
Redis::publish('test', json_encode($this->message, JSON_UNESCAPED_UNICODE));
}
```
2. 接受消息
新建命令
```
class Subscriber extends Command
{
protected $signature = 'redis:sub';
protected $description = '消息订阅监听器,需要开启常驻进程 以及 用进程守护工具进行守护';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* 逻辑处理
* @return mixed
*/
public function handle()
{
ini_set("default_socket_timeout", -1);
Redis::psubscribe(['*'], function ($message, $channel) {
echo $message;
});
}
}
```
3. 定义规划平台接口
4. 集成几口,各自实现各个功能接口代码
5. 记录好任务执行结果,如果原纪录的全部平台都已经成功执行,则标记改广播任务已完成。
最后
以上就是洁净绿茶为你收集整理的Laravel Redis发布与订阅的全部内容,希望文章能够帮你解决Laravel Redis发布与订阅所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复