第一次寫寫文章,不好的地方請多多包涵
因為需要用redis的訂閱與釋出所以研究了一下,明白後發現其實挺簡單的,但是自己中間自己也走了很多的彎路,所以記錄一下。
第一步:使用 php artisan make:command RedisSubscribe
建立命令會在/app/Console/Commands/目錄下生成RedisSubscribe.php檔案
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Redis;
class RedisSubscribe extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'redis: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()
{
// 這段程式碼需要自己完善
// 重新建立redis物件是為了避免當redis有釋出是不能有其他的操作
$redis = Redis::connection('publisher');
$redis->psubscribe(['test'], function ($message) {
Redis::set('2', $message);
});
}
}
第二步:使用subscribe test
監控頻道test
注意:一定要在執行的環境上執行
php artisan redis:subscribe
否則會看不到資訊輸出資訊的,因為本人就在上面走了彎路,程式碼執行的是homestead的環境上,但是在PHPstorm上執行的php artisan redis:subscribe
後來發現自己特別的傻。
第三步
<?php
namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;
use Illuminate\Http\Request;
class MonitorNewController extends Controller
{
public function handleRedis(Request $request)
{
// 這裡redis的連結也是為了避免當redis有釋出是不能有其他的操作
$redis = Redis::connection('default');
$redis->publish('test', $request->get('name'));
}
}
在api中設定路由訪問handleRedis
方法就能看到上圖的中結果。好了到此就算完成了redis的釋出和訂閱。
下面介紹一下在homestead環境中使用後臺程式完成永久監控。
一種情況使用nohup
監控,一種使用screen
監控 不過這兩個都需要安裝一下
安裝nohup
命令 sudo apt-get install coreutils
安裝後使用命令 nohup php artisan redis:subscribe
注意
這個命令需要到專案的根目錄下去執行,否則會報打不開artisan檔案
另外一種情況是使用screen開啟程式
安裝命令 apt-get install screen
安裝完成後使用 screen -S [Process name] (你的程式名稱)注意
這個也是需要在專案的根目錄中執行,否則在screen中執行 php artisan redis:subscribe
命令也是無法開啟 artisan
的錯誤。
在 screen
中執行 php artisan redis:subscribe
命令。到此redis的訂閱和釋出完成。
本作品採用《CC 協議》,轉載必須註明作者和本文連結