RabbitMq

1.RabbitMq的使用场景

  (1).解耦;
  (2).涉及顺序的先后之分;
  (3).并发
  (4).异步通信

2.RabbitMq的内部协议

在这里插入图片描述

  • broker: 中间商,用来接受和分发消息;
  • Virtual Host: 类似于namespace概念。当多个不同的用户使用同一个RabbitMQ server提供的服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange/queue等。
  • Binding: exchange和queue之间的虚拟连接,binding中可以包含routing key。Binding信息被保存到exchange中的查询表中,用于message的分发依据
  • Exchange: message到达broker的第一站,根据分发规则,匹配查询表中的routing key,分发消息到queue中去。常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)。

3. 基本使用

 $connection = new AMQPStreamConnection($host, $port, $user, $pswd, $vhost);
 $channel = $connection->channel();
 $channel->queue_declare($queue, false, true, false, false);
 $channel->exchange_declare($exchange, 'direct', false, true, false);
 $channel->queue_bind($queue, $exchange);
 $message = new AMQPMessage($message);
 
 ## 生产
  $channel->basic_publish($message, $this->exchange);
  
 ### 消费 
 $callback = function ($msg) {
      echo ' [x] Received ', $msg->body, "\n";
 };
 $channel->basic_consume($this->queue, '', false, true, false, false, $callback);
 while (count($this->channel->callbacks)) {
     $channel->wait();
 }
 
 $channel->close();
 $connection->close();

4 扩展

  • 场景一
生产消息的时候,当队列里面长时间为空之后,再次往队列里面推送数据的时候,这个时候,并不会消费数据,但是消费的进程依旧是开启的,只不过服务端链接断了。
这个时候可以添加心跳,目前官方的RabbitMq发行的版本中心跳为0.故我们可以在建立链接初始化的时候添加心跳
 $connection = new AMQPStreamConnection($host, $port, $user, $pswd, $vhost,false, 'AMQPLAIN', null, 'en_US', 3.0 ,  130.0, null, false, 60);
  • 场景二
当数据需要有优先级时,需要设置权重
 #### 相对应的消费也需要初始化
 $table = new AMQPTable();
 $table->set('x-max-priority', 20);
####   
 $connection = new AMQPStreamConnection($host, $port, $user, $pswd, $vhost);
 $channel = $connection->channel();
 $channel->queue_declare($queue, false, true, false, false, false, $table);
 $channel->exchange_declare($exchange, 'direct', false, true, false);
 $channel->queue_bind($queue, $exchange);
 $message = new AMQPMessage($message, [ 
 								'delivery_mode' => 2,
           						 'priority' => 10
           	]);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值