模拟一个生产者 2个消费者 生产者后台管理商品 消费者1是搜索系统 消费2是前台系统 执行添加商品 搜索系统可以收到消息,执行修改商品 前台系统和搜索系统都可以收到消息 执行删除商品 前台系统和搜索系统也可以收到消息
/**
* 生产路由模式
* @throws \Exception
* User: cwh DateTime:2021/8/20 18:02
*/
public function sendDirect(){
$connection = new AMQPStreamConnection('localhost', 5672, 'admin', 'admin');
$channel = $connection->channel();
$channel->exchange_declare('direct_logs', 'direct', false, false, false);
// $severity = isset($argv[1]) && !empty($argv[1]) ? $argv[1] : 'info';
// $data = implode(' ', array_slice($argv, 2));
if (empty($data)) {
$data = "删除商品:id=1001";
}
// $route_key = "update";
// $route_two_key = "delete";
// $route_three_key = "insert";
$route_key = "delete";
$exchange = "direct_logs";
$msg = new AMQPMessage($data);
$channel->basic_publish($msg, $exchange, $route_key);
echo ' [x] Sent ', $route_key, ':', $data, "\n";
$channel->close();
$connection->close();
}
/**
* 消费路由模式
* User: cwh DateTime:2021/8/20 18:04
*/
public function receiveDirect(){
$connection = new AMQPStreamConnection('localhost', 5672, 'admin', 'admin');
$channel = $connection->channel();
$queue_name = "direct_queue2";
$route_key = "update";
$route_two_key = "delete";
$route_three_key = "insert";
$exchange = "direct_logs";
$channel->exchange_declare($exchange, 'direct', false, false, false);
$channel->queue_declare($queue_name, false, false, false, false);
// $severities = array_slice($argv, 1);
// if (empty($severities)) {
// file_put_contents('php://stderr', "Usage: $argv[0] [info] [warning] [error]\n");
// exit(1);
// }
// foreach ($severities as $severity) {
$channel->queue_bind($queue_name, 'direct_logs', $route_key);
$channel->queue_bind($queue_name, 'direct_logs', $route_two_key);
$channel->queue_bind($queue_name, 'direct_logs', $route_three_key);
// }
echo " [*] Waiting for logs. To exit press CTRL+C\n";
// $callback = function ($msg) {
// echo ' [x] ', $msg->delivery_info['routing_key'], ':', $msg->body, "\n";
// };
$channel->basic_consume($queue_name, '', false, true, false, false, [$this,'callbackDirect']);
while ($channel->is_open()) {
$channel->wait();
}
$channel->close();
$connection->close();
}
/**
* 回调路由模式
* @param $msg
* User: cwh DateTime:2021/8/20 1:00
*/
public function callbackDirect($msg){
// echo ' [x] ', $msg->delivery_info['routing_key'], ':', $msg->body, "\n";
logs("搜索系统收到:". $msg->delivery_info['routing_key']. ':'. $msg->body,'pushMessage');
}
/**
* 消费直接交换模式
* User: cwh DateTime:2021/8/20 18:04
*/
public function receiveDirectTwo(){
$connection = new AMQPStreamConnection('localhost', 5672, 'admin', 'admin');
$channel = $connection->channel();
$queue_name = "direct_queue1";
$route_key = "update";
$route_two_key = "delete";
$route_three_key = "insert";
$exchange = "direct_logs";
$channel->exchange_declare($exchange, 'direct', false, false, false);
$channel->queue_declare($queue_name, false, false, false, false);
// $severities = array_slice($argv, 1);
// if (empty($severities)) {
// file_put_contents('php://stderr', "Usage: $argv[0] [info] [warning] [error]\n");
// exit(1);
// }
// foreach ($severities as $severity) {
$channel->queue_bind($queue_name, 'direct_logs', $route_key);
$channel->queue_bind($queue_name, 'direct_logs', $route_two_key);
// }
echo " [*] Waiting for logs. To exit press CTRL+C\n";
// $callback = function ($msg) {
// echo ' [x] ', $msg->delivery_info['routing_key'], ':', $msg->body, "\n";
// };
$channel->basic_consume($queue_name, '', false, true, false, false, [$this,'callbackDirectTwo']);
while ($channel->is_open()) {
$channel->wait();
}
$channel->close();
$connection->close();
}
/**
* 回调直接交换模式
* @param $msg
* User: cwh DateTime:2021/8/20 1:00
*/
public function callbackDirectTwo($msg){
// echo ' [x] ', $msg->delivery_info['routing_key'], ':', $msg->body, "\n";
logs("前台系统收到:". $msg->delivery_info['routing_key']. ':'. $msg->body,'pushMessage');
}