Laravel 通过 Redis 在多个服务器上监听事件

问题描述 投票:0回答:2

我在多个服务器上部署 Laravel 项目,我的平衡器在它们之间分配访问者。

我想通过Redis(队列)组织广播事件并监听所有服务器上的事件(服务器有一个公共的redis数据库)。

我有活动课程:

use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class BaseRedisEvent implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public string $connection = 'redis';
    public string $queue = 'default';
    public string $channel = 'default';

    public function broadcastOn(): Channel
    {
        return new Channel($this->channel);
    }
}

还有监听器类

use App\Events\Bitcoin\Address\CreatedEvent;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Redis;

class BaseRedisListener
{
    public function __construct()
    {
    }

    public function handle(BaseRedisEvent $event)
    {
        Log::debug('New Event in Redis ' . var_export($event, true));
    }
}

发送事件后,我希望监听器能够在所有服务器上工作。

BaseRedisEvent::dispatch();

仅将发送事件的服务器的条目添加到日志中。我想要所有服务器。你能帮我吗?

laravel events redis listener
2个回答
0
投票

无法登录文件。您应该使用添加自定义驱动程序来处理 /config/logging.php 中的日志。请记住,您应该为此实现自定义类。一些示例和教程https://cylab.be/blog/144/laravel-custom-logging

请谷歌搜索 Laravel 自定义日志驱动程序。


0
投票

有同样的问题。事实证明,如果您将两个应用程序的 redis 设置为广播和队列,它就可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.