php设置rabbitmq重试,php操作rabbitmq教程

1: 连接rabbitmq 新建exchange和queue

amqp_manager.php

$conn_args = array('host' => 'localhost', 'port' => '5672', 'login' => 'guest', 'password' => 'guest');

$conn = new AMQPConnection($conn_args);

if ($conn->connect()) {

echo "Established a connection to the broker \n";

}

else {

echo "Cannot connect to the broker \n ";

exit(0);

}

$channel = new AMQPChannel($conn);

$exchange = new AMQPExchange($channel);

$exchange->setName('lizhifeng');

$exchange->setType(AMQP_EX_TYPE_DIRECT);

$exchange->setFlags(AMQP_DURABLE | AMQP_AUTODELETE) ;

$exchange->declare();     // 声明一个名为 lizhifeng的 路由器

// 添加一个名为queue1  的队列并绑定 key1

$queue = new AMQPQueue($channel);

$queue->setName('queue1');

$queue->setFlags(AMQP_DURABLE | AMQP_AUTODELETE);

$queue->declare();

$queue->bind('lizhifeng','key1');

// 添加一个名为queue2  的队列并绑定 key2

$queue = new AMQPQueue($channel);

$queue->setName('queue2');

$queue->setFlags(AMQP_DURABLE | AMQP_AUTODELETE);

$queue->declare();

$queue->bind('lizhifeng','key2');

// 将queue1 绑定到key3    注意key3不会覆盖key1

// 而是key1和key3将同时生效

$queue = new AMQPQueue($channel);

$queue->setName('queue1');

##$queue->setFlags(AMQP_DURABLE | AMQP_AUTODELETE); 无需重复设置队列queue1的属性

##$queue->declare();   这里不需要再重复申明了

$queue->bind('lizhifeng','key3');

/*

// 删除exchange

$exchange = new AMQPExchange($channel);

$exchange->setName('lizhifeng');

$exchange->delete();

// 删除队列

$queue = new AMQPQueue($channel);

$queue->setName('queue1');

$queue->delete();

$queue = new AMQPQueue($channel);

$queue->setName('queue2');

$queue->delete();

*/

?>

2:连接rabbitmq 往exchange中写消息

amqp_server.php

$routingkey='key1';

$conn_args = array('host' => 'localhost', 'port' => '5672', 'login' => 'guest', 'password' => 'guest');

$conn = new AMQPConnection($conn_args);

if ($conn->connect()) {

echo "Established a connection to the broker \n";

}

else {

echo "Cannot connect to the broker \n ";

}

$channel = new AMQPChannel($conn);

$exchange = new AMQPExchange($channel);

$exchange->setName('lizhifeng');

for($i=0;$i<100000;$i++)

{

if($routingkey=='key1')

{

$routingkey='key2';    // 路由到队列queue2

}

else if($routingkey=='key2')

{

$routingkey='key3';    // 路由到队列queue1

}

else

{

$routingkey='key1';    // 路由到队列queue1

}

$tmp=array();

$tmp[]="第".$i."个消息的key为".$routingkey ;

$message = json_encode($tmp);

if($exchange->publish($message,$routingkey))

{

print $routingkey."\tok\n";

}

else

{

print "error\n" ;

}

}

3:连接rabbitmq消费消息

amqp_client.php

//连接RabbitMQ

$conn_args = array( 'host'=>'127.0.0.1' , 'port'=> '5672', 'login'=>'guest' , 'password'=> 'guest','vhost' =>'/');

$conn = new AMQPConnection($conn_args);

if ($conn->connect()) {

echo "Established a connection to the broker \n";

}

else {

echo "Cannot connect to the broker \n ";

exit();

}

$channel = new AMQPChannel($conn);

$q = new AMQPQueue($channel);

$q->setName('queue1');

// 这里并不是创建新的队列,只是连接到名为quene1的队列

// 我的理解为队列其实在服务器上,消息已经被路由到不同的队列了, 我们只需取消息

while($messages = $q->get(AMQP_AUTOACK))

{

var_dump(json_decode($messages->getBody(), true ));

}

$q = new AMQPQueue($channel);

$q->setName('queue2');

while($messages = $q->get(AMQP_AUTOACK))

{

var_dump(json_decode($messages->getBody(), true ));

}

$conn->disconnect();

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值