Ich habe eine Controller-Aktion, um die Benutzerdaten zu akzeptieren, Daten zu verarbeiten und dann das Ergebnis anzuzeigen. Da es ein langwieriger Prozess ist, versuche ich, dies einem Arbeiter zuzuordnen und zeige später die Ergebnisse.Richten Sie einen Arbeiter in Yii2-Heroku ein
Ich brauche Hilfe bei der Einrichtung der Arbeiter hier.
Mein aktuelles procfile ist
web: vendor/bin/heroku-php-apache2
worker: php yii hello/process
Und ich bin es Prüfung von
public function actionTest(){
$config = require(__DIR__ . '/../config/console.php');
$console = new \yii\console\Application($config);
$console->runAction("hello/send");
}
Befehl Senden
public function actionSend($message = 'hello world')
{
$conn = $this->connection;
$ch = $conn->channel();
$exchange = 'amq.direct';
$queue = 'basic_get_queue';
$ch->queue_declare($queue, false, true, false, false);
//$ch->exchange_declare($exchange, 'direct', true, true, false);
//$ch->queue_bind($queue, $exchange);
$msg_body = $message;
$msg = new AMQPMessage($msg_body, array('content_type' => 'text/plain', 'delivery_mode' => 2));
$ch->basic_publish($msg,'', $queue);
/*
$retrived_msg = $ch->basic_get($queue);
var_dump($retrived_msg->body);
$ch->basic_ack($retrived_msg->delivery_info['delivery_tag']); */
$ch->close();
$conn->close();
}
Prozess Befehl
public function actionProcess(){
$conn = $this->connection;
$ch = $conn->channel();
$queue = 'basic_get_queue';
$ch->queue_declare($queue, false, true, false, false);
//$retrived_msg = $ch->basic_get($queue);
$callback = function($msg) {
$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
echo $msg->body;
};
$ch->basic_qos(null, 1, null);
$ch->basic_consume($queue, '', false, false, false, false, $callback);
// loop over incoming messages
while(count($ch->callbacks)) {
$ch->wait();
}
$ch->close();
$conn->close();
}
laufen
Aber es löst nicht den Arbeiter aus!
Ich öffnete zwei Terminals und versuchte, und ich konnte die Nachricht im Prozessbefehlsfenster echoed bekommen.
Nach der Bereitstellung, ich konnte die Arbeitskraft sehen und laufen
2017-03-13T10:25:24.114552+00:00 heroku[worker.1]: Starting process with command 'php yii hello/process'
2017-03-13T10:25:24.783227+00:00 heroku[worker.1]: State changed from starting to up
Aber Arbeiter auslöst nicht, wenn ich die send command
auch vom Terminal laufen.
Bitte helfen!