add Nexus::dispatchQueueJob()

This commit is contained in:
xiaomlove
2025-06-10 21:50:41 +07:00
parent 7bb061c458
commit f2602cbd91
4 changed files with 102 additions and 4 deletions
+42 -2
View File
@@ -2,9 +2,11 @@
namespace Nexus;
use App\Http\Middleware\Locale;
use Illuminate\Container\Container;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\Capsule\Manager;
use Illuminate\Redis\RedisManager;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;
use Nexus\Plugin\Hook;
use Nexus\Translation\NexusTranslator;
final class Nexus
@@ -33,6 +35,10 @@ final class Nexus
private static ?NexusTranslator $translator = null;
private static ?Manager $queueManager = null;
const QUEUE_CONNECTION_NAME = 'my_queue_connection';
const PLATFORM_USER = 'user';
const PLATFORM_ADMIN = 'admin';
const PLATFORM_TRACKER = 'tracker';
@@ -384,5 +390,39 @@ final class Nexus
return self::$translator;
}
private static function getQueueManager(): Manager
{
if (is_null(self::$queueManager)) {
$container = Container::getInstance();
$redisConfig = nexus_config('nexus.redis');
$redisConnectionName = "my_redis_connection";
$container->singleton('redis', function ($app) use ($redisConfig, $redisConnectionName) {
$redisDriver = "phpredis";
// 这里的配置应该匹配 redis.php 配置文件中的 default 连接
$connectionConfig = [
'client' => $redisDriver,
$redisConnectionName => $redisConfig
];
return new RedisManager($app, $redisDriver, $connectionConfig);
});
$queueManager = new Manager($container);
$queueManager->addConnection([
'driver' => 'redis',
'host' => $redisConfig['host'],
'password' => $redisConfig['password'],
'queue' => 'nexus_queue', // 队列名称
'connection' => $redisConnectionName, // Redis 连接名称,类似注册的 'redis' 服务中的 'default'
], self::QUEUE_CONNECTION_NAME); // 将这个 queue 连接起个不一样的名字
$queueManager->setAsGlobal();
self::$queueManager = $queueManager;
}
return self::$queueManager;
}
public static function dispatchQueueJob(ShouldQueue $job): void
{
self::getQueueManager()->connection(self::QUEUE_CONNECTION_NAME)->push($job);
}
}