我在多个服务器上部署 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();
仅将发送事件的服务器的条目添加到日志中。我想要所有服务器。你能帮我吗?
无法登录文件。您应该使用添加自定义驱动程序来处理 /config/logging.php 中的日志。请记住,您应该为此实现自定义类。一些示例和教程https://cylab.be/blog/144/laravel-custom-logging
请谷歌搜索 Laravel 自定义日志驱动程序。
有同样的问题。事实证明,如果您将两个应用程序的 redis 设置为广播和队列,它就可以工作。