RabbitMQ使用流程

第一步装好配置环境
在这里插入图片描述
简述流程:

  1. 链接broker服务。new AMQPConnection();
  2. 在服务中创建创建通道。new AMQPChannel();
  3. 在通道中创建交换机。new APMQPExchange();
  4. 设置交换机名字,类型,持久化,申明。setName(),setType(),setFlags(),declareExchange()
  5. 生产者将消息发送 (delivery_mode:2。将消息持久化):publish(json_encode($msg), $routingKey, AMQP_NOPARAM, [‘delivery_mode’ => 2]) ;
  6. 生产者在通道中创建队列,设置名称,持久设置,声明,通过名称和路由键绑定。new AMQPQueue(),setName(),setFlags(),declareQueue(),bind($exchange->getName(), $routingKey)
  7. 生产者队列接收消息。queue->consume(“receive”)

第二步编写生产者和消费者
生产者 publisher.php

<?php
$value = $_POST['value'];	//接收到需要到数据
$config = array(
    'host' => '127.0.0.1',
    'vhost' => '/',
    'port' => '',
    'login' => '',
    'password' => ''
);
$cnn = new AMQPConnection($config); //通过config链接amqp服务
if (!$cnn->connect()) {
    echo "Cannot connect to the broker";
    exit();
}
$ch = new AMQPChannel($cnn);	//创建一个amqp通道
$ex = new AMQPExchange($ch);	//在通道内创建交换机

$routingKey = 'key';			//消息的路由键要和消费者的路由键一致
$exchangeName = 'exchange';		//交换机名称,一定要和消费者端一致,
$ex->setName($exchangeName);

//设置交换机类型
//AMQP_EX_TYPE_DIRECT:直连交换机
//AMQP_EX_TYPE_FANOUT:扇形交换机
//AMQP_EX_TYPE_HEADERS:头交换机
//AMQP_EX_TYPE_TOPIC:主题交换机
$ex->setType(AMQP_EX_TYPE_DIRECT);		//此处为直连交换机
$ex->setFlags(AMQP_DURABLE);			//设置交换机持久化
$ex->declareExchange();					//生命交换机

//消息内容
$msg = array(
    'info' => $value,
);
//发送消息到交换机,并返回发送结果
//delivery_mode:2声明消息持久,持久的队列+持久的消息在RabbitMQ重启后才不会丢失
echo "Send Message:".$ex->publish(json_encode($msg), $routingKey, AMQP_NOPARAM, ['delivery_mode' => 2]) . PHP_EOL;
//代码执行完毕后进程会自动退出

消费者 consume.php

<?php
$config = array(
    'host' => '127.0.0.1',
    'vhost' => '/',
    'port' => '',
    'login' => '',
    'password' => ''
);
//连接broker
$cnn = new AMQPConnection($config);
if (!$cnn->connect()) {
    echo "Cannot connect to the broker";
    exit();
}

//在连接内创建一个通道
$channel = new AMQPChannel($cnn);
//创建一个交换机
$exchange = new AMQPExchange($channel);
$routingKey = 'key';			//此处与publisher的路由键一致
$exchangeName = 'exchange';		//交换机一致
//设置交换机名称
$exchange->setName($exchangeName);
$exchange->setType(AMQP_EX_TYPE_DIRECT);
$exchange->setFlags(AMQP_DURABLE);
$exchange->declareExchange();

//创建消息队列
$queue = new AMQPQueue($channel);
//设置队列名称
$queue->setName('queue');
$queue->setFlags(AMQP_DURABLE);
$queue->declareQueue();


$queue->bind($exchange->getName(), $routingKey);	//队列绑定
//接收消息并进行处理的回调方法
function receive($envelope, $q) {
    sleep(2);		//休眠
    $content = json_decode($envelope->getBody());	//取出publisher传来中的数据
    $info = $content->info;
	
	//wait for coding
	//自行创作,mysql,redis等操作
	

    //显式确认,队列收到消费者显式确认后,会删除该消息
    $q->ack($envelope->getDeliveryTag());
}
//设置消息队列消费者回调方法,并进行阻塞
$queue->consume("receive");
//$q->consume("receive", AMQP_AUTOACK);//隐式确认,不推荐

注意:相关联的路由键(routingKey)与交换机(exchange)名称必须一致。

结尾操作
php publisher.php
php consume.php
即可。

个人学习记录。欢迎指正。
https://blog.csdn.net/weixin_38418601/article/details/110235037

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值