概述
Redis 提供了调用 Redis 的 publish 和 subscribe 命令的接口, Redis 通过命令可在给定“频道”监听消息, 而且还可以可以从另外一个应用发布消息到这个频道, 甚至使用其它编程语言, 从而允许项目在不同的应用/进程之间轻松通信。
通过 Redis 订阅, 获得大盘数据(鑫哥推送, C++ 结合 Redis 发布)
注意点
- 安装 redis 数据库
- 安装 predis/predis 组件, 配置 redis 文件
- 根据文档, publish 可以写在路由中, 由于调用 subscribe 方法会开启一个常驻进程, 我们将在Artisan命令中调用该方法, 所以需要建一个 artisan 命令.
具体操作
-
在路由中写一个 redis 发布
Route::get('publish', function () { Redis::publish('test', '222'); });
-
执行 php artisan 查看 artisan 命令 list
其中一些命名我们已经比较熟悉了, 比如创建迁移 make:migration 以及执行迁移 migrate, 又比如创建模型 make:model, 创建控制器 make:controller 等.
-
创建自己的 artisan 命令
我们执行 php artisan make:console --help 查看一下创建一个 artisan 命令的使用方法
$ php artisan make:console Test --command=test:subscribe
其中 Test 是命令名, test:subscribe 是控制台执行的命令, 类似 make:console.
执行完成后, 会在 app/Console/Commands 目录下生成一个 Test.php 文件:
<?php namespace App\Console\Commands; use Illuminate\Console\Command; use Redis; class Test extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'test:subscribe'; /** * The console command description. * * @var string */ protected $description = 'Command description'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { echo 'start'; Redis::subscribe(['test'], function($message) { echo $message; }); } }
其中 $signature 即为在控制台执行的命令名, $description 为命令描述, handle 方法为执行命令时调用的方法。
-
在运行命令前需要将其注册到 App\Console\Kernel 的 $commands 属性中:
protected $commands = [ Commands\Inspire::class, Commands\Test::class, ];
接下来在项目根目录执行 php artisan test:subscribe 这样就为 subscribe 开启了一个常驻进程. 在浏览其中访问 domain/publish 就可以发布信息到订阅了.