Re: AMQP 1.0.0: AMQPExchangeException when receiving signal

From: Date: Tue, 21 Feb 2012 19:06:58 +0000
Subject: Re: AMQP 1.0.0: AMQPExchangeException when receiving signal
References: 1 2  Groups: php.pecl.dev 
Request: Send a blank email to pecl-dev+get-9163@lists.php.net to get a copy of this message
Your response prompted me to review my test code, and I realized that I made a mistake in the way I was using pcntl_signal_dispatch. The code below behaves as expected. Thank you for your response, and sorry about the PIBCAK problem. <?php echo "pid: ".getmypid().PHP_EOL; global $run; $run = true; function sig_handler($sig) { global $run; echo "SIG".PHP_EOL; $run = false; } pcntl_signal(SIGUSR1, "sig_handler"); $con = new AMQPConnection(); $con->connect(); $channel = new AMQPChannel($con); $ex = new AMQPExchange($channel); $ex->setName("exchange1"); $ex->setType(AMQP_EX_TYPE_FANOUT); $ex->declare(); $q = new AMQPQueue($channel); $q->setName("queue-test"); $q->declare(); $q->bind('exchange1', 'routing.key'); $msg = "test"; try { while($run) { $ex->publish($msg, 'routing.key', 0, array('delivery_mode' => 2)); pcntl_signal_dispatch(); } } catch (Exception $e) { var_dump($e); } echo "about to disconnect".PHP_EOL; $con->disconnect(); echo "done".PHP_EOL; ?> On Tue, Feb 21, 2012 at 9:49 AM, Pieter de Zwart < pdezwart@rubiconproject.com> wrote: > Have you tried this same code with something other than publishing > messages to an AMQP broker? I don¹t know either if this is a normal > behavior or not, but I would assume that if some other bare PHP code has > the same execution chain, then it is normal =) > > Pieter > > > > > > On 2/17/12 2:26 PM, "Pierre Mariani" <pierre.mariani@gmail.com> wrote: > > >Hello Everybody, > > > >I have been playing with the AMQP 1.0.0 extension. > >I am seeing the following behavior that I find surprising, but I am > >not sure whether it is a bug, and if yes in which project (PHP, AMQP > >extension or rabbitmq-c). > > > >$ uname -a > >> Linux ip-XXX 2.6.32-317-ec2 #36-Ubuntu SMP Fri Jul 8 18:12:30 UTC 2011 > >> x86_64 GNU/Linux > > > > > >$ cat /etc/lsb-release > >> DISTRIB_ID=Ubuntu > >> DISTRIB_RELEASE=10.04 > >> DISTRIB_CODENAME=lucid > >> DISTRIB_DESCRIPTION="Ubuntu 10.04.3 LTS" > > > > > >$ php -v > >> PHP 5.3.10 (cli) (built: Feb 17 2012 11:22:03) > >> Copyright (c) 1997-2012 The PHP Group > >> Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies > > > > > >$ php -i | grep -i configure > >> Configure Command => './configure' '--prefix=/home/pierre/' > >> '--enable-pcntl' > > > > > >$ pear list -c pecl > >> INSTALLED PACKAGES, CHANNEL PECL.PHP.NET: > >> ========================================= > >> PACKAGE VERSION STATE > >> amqp 1.0.0 stable > > > > > >This is the script: > > > ><?php > >> pcntl_signal_dispatch(); > >> global $run; > >> $run = true; > >> function sig_handler($sig) { > >> global $run; > >> switch($sig) { > >> case SIGUSR1: > >> case SIGTERM: > >> case SIGINT: > >> echo "SIG".PHP_EOL; > >> $run = false; > >> break; > >> } > >> } > >> pcntl_signal(SIGUSR1, "sig_handler"); > >> pcntl_signal(SIGTERM, "sig_handler"); > >> pcntl_signal(SIGINT, "sig_handler"); > >> $con = new AMQPConnection(); > >> $con->connect(); > >> $channel = new AMQPChannel($con); > >> $ex = new AMQPExchange($channel); > >> $ex->setName("exchange1"); > >> $ex->setType(AMQP_EX_TYPE_FANOUT); > >> $ex->declare(); > >> $q = new AMQPQueue($channel); > >> $q->setName("queue-test"); > >> $q->declare(); > >> $q->bind('exchange1', 'routing.key'); > >> $msg_template = "test"; > >> try { > >> $i = 0; > >> while($run) { > >> $msg = $i." - ".$msg_template; > >> $ex->publish($msg, 'routing.key', 0 /* default */, > >> array('delivery_mode' => 2)); > >> $i++; > >> } > >> } > >> catch (Exception $e) { > >> var_dump($e); > >> } > >> $con->disconnect(); > >> ?> > > > > > >After starting it and getting its pid, I run: > > > >kill -s SIGUSR1 <pid> > > > > > >And I get the following exception: > > > >object(AMQPExchangeException)#5 (7) { > >> ["message":protected]=> > >> string(0) "" > >> ["string":"Exception":private]=> > >> string(0) "" > >> ["code":protected]=> > >> int(0) > >> ["file":protected]=> > >> string(28) "/home/pierre/publisher.php" > >> ["line":protected]=> > >> int(39) > >> ["trace":"Exception":private]=> > >> array(1) { > >> [0]=> > >> array(6) { > >> ["file"]=> > >> string(28) "/home/pierre/publisher.php" > >> ["line"]=> > >> int(39) > >> ["function"]=> > >> string(7) "publish" > >> ["class"]=> > >> string(12) "AMQPExchange" > >> ["type"]=> > >> string(2) "->" > >> ["args"]=> > >> array(4) { > >> [0]=> > >> string(13) "191395 - test" > >> [1]=> > >> string(11) "routing.key" > >> [2]=> > >> int(0) > >> [3]=> > >> array(1) { > >> ["delivery_mode"]=> > >> int(2) > >> } > >> } > >> } > >> } > >> ["previous":"Exception":private]=> > >> NULL > >> } > > > > > >Instead of the exception I would expect the current loop iteration to > >finish and break out of it and disconnect from the AMQP server. > > > >So, is this a bug or am I misunderstanding something? > > > >Thank you. > >Pierre > >

« previous php.pecl.dev (#9163) next »