У меня есть два красноречивых события модели, выполненных API (вставка и обновление).Я проверил их с Почтальоном, и они работают. Я получаю журналы выполненных операций.Я удалил журналы, так как моя цель - запускать события-толкатели, когда срабатывает одно из этих событий.Я установил толкатель, устанавливающий это от композитора.Я обновил файлы конфигурации и env, которые я покажу ниже, и я сделал несколько триггеров на канал с панели мониторинга толкателя.
Я использую Ubuntu 18.04 с apache, laravel 5.7 и при попытке HTTPзапрос Я заметил, что $ re = $ pusher-> trigger ('api-channel', 'model.insert', array ('message' => 'hello'));возвращает ложьЯ пробовал как комментировать строку шифрования в конфиге, так и установить ее в false, обновляя время через ntp, как предлагалось в других сообщениях, но это не решает мою проблему.Я пытался вызвать событие как из контроллера, так и из загрузочной функции eventserviceprovider, но результат всегда одинаков.
Это мой js
//event listener for document repo api
// Enable pusher logging - don't include this in production
Pusher.logToConsole = true;
var pusher = new Pusher('*****', {
cluster: 'eu',
forceTLS: true
});
var channel = pusher.subscribe('api-channel');
channel.bind('model.insert', function(document) {
alert(JSON.stringify(document.message));
console.log(document);
});
Я проверил, если конфигурацияправильно настроить, добавив эти строки кода в BroadCastManager.php
var_dump($config['key']);
var_dump($config['secret']);
var_dump( $config['app_id']);
var_dump($config['options']);
exit;
И по выводу я могу сказать, что они правильные.Это мой код при попытке запуска от контроллера
namespace App\Http\Controllers;
.
.
.
use Illuminate\Http\Request;
use Pusher\Pusher as Pusher;
.
.
.
if ($model->save()) {
$options = array(
'cluster' => 'eu',
'encrypted' => false
// 'host' => '127.0.0.1',
// 'port' => 6001,
// 'scheme' => 'http'
);
$pusher = new Pusher(
'key',
'secret',
'app-id',
$options
);
// dd($pusher->get_channels());
$re = $pusher->trigger('api-channel', 'model.insert', array('message' => 'hello'));
dd($re);
return new ModelResource($model);
}
Я также пытался создать событие laravel и прослушиватель и вызвать это событие в контроллере после того, как было выполнено изменение модели.В этом случае я получаю эту ошибку:
"message": "",
"exception": "Illuminate\\Broadcasting\\BroadcastException",
"file": "/home/usr/projects/tdv/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php",
"line": 117,
"trace": [
{
"file": "/home/usr/projects/tdv/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastEvent.php",
"line": 48,
"function": "broadcast",
"class": "Illuminate\\Broadcasting\\Broadcasters\\PusherBroadcaster",
"type": "->"
Это мой класс событий.Он зарегистрирован у поставщика услуг обработки событий.
namespace App\Events;
use App\ModelRepository;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Log;
class ModelEvent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $modelRepository;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(ModelRepository $modelRepository)
{
//
$this->$modelRepository = $modelRepository;
$this->broadcast();
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return new Channel('api-channel');
}
public function broadcast()
{
$options = array(
'cluster' => 'eu',
'host' => '127.0.0.1',
'port' => 6001,
'scheme' => 'http',
'useTLS' => true
);
$pusher = new Pusher(
'***',
'***',
'***',
$options
);
return $pusher->trigger('api-channel', 'model.insert', array('data' => $this->modelRepository));
}
}
, и в этом случае именно так я запускаю событие в контроллере
event(new ModelEvent(new ModelRepository()));
Заранее спасибо!:)