Burada bir süre sonra çalışmayı bırakan bir php amqp tüketici ile küçük bir sorun var. Aşağıda silex komutumu görebilirsiniz. Ayrıca kırık ağ bağlantılarını ele almak için kalp atışı ve kalıcı yapılandırma ile çalıştım, ancak değişmiyor. Tüketicinin sıradaki mesajları okumadığının bir nedeni ne olabilir? Script çalışmıyor, sadece uyuyor gibi görünüyor.PHP AMQP tüketici bir süre sonra cevap vermiyor
<?php
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Knp\Command\Command as BaseCommand;
use PhpAmqpLib\Message\AMQPMessage;
class RequestWorkerCommand extends BaseCommand
{
protected function configure()
{
$this->setName('queue:worker');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$app = $this->getSilexApplication();
$amqp = $app['amqp.connection']; /* @var $amqp \PhpAmqpLib\Connection\AMQPStreamConnection */
$channel = $amqp->channel();
$callback = function($message) use ($input, $output) {
return call_user_func_array([$this, 'processMessage'], [$message, $input, $output]);
};
$channel->queue_declare('myqueue', false, true, false, false);
$channel->basic_qos(null, 1, null);
$channel->basic_consume('myqueue', '', false, false, false, false, $callback);
while(count($channel->callbacks)) {
$output->writeln('Waiting for incoming price requests');
$channel->wait();
}
}
protected function processMessage(AMQPMessage $message, InputInterface $input, OutputInterface $output)
{
$app = $this->getSilexApplication();
try {
$data = json_decode($message->body, true);
$request = Request::createFromArray($data); /* create object from data */
$message->delivery_info['channel']->basic_ack($message->delivery_info['delivery_tag']);
$app['distributor']->distribute($request); /* process message */
} catch (\Exception $e) { /* handle error */ }
}
}
Geç cevap için özür dilerim. Kalp atışlarını phpamqp-lib ile kullanmaya çalıştım ama beklendiği gibi çalışmıyor. Şimdi bağlantı zaman aşımı ile deneyin, ama bu aynı zamanda zombi bağlantıları gibi bazı yan etkileri vardır. Süreç yönetimi için denetleyici kullanıyorum ve bir çalışan ölürse yeni süreçleri başlatır. Bağlantılar hala rabbitmq üzerinde yaşıyor !? – Daniel