Re: AMQP 1.0.0: AMQPExchangeException when receiving signal

From: Date: Tue, 21 Feb 2012 17:49:39 +0000
Subject: Re: AMQP 1.0.0: AMQPExchangeException when receiving signal
References: 1  Groups: php.pecl.dev 
Request: Send a blank email to pecl-dev+get-9162@lists.php.net to get a copy of this message
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 (#9162) next »