php amqp 消息队列 RabbitMQ 交换器类型 直连 (三)
1、AMQP_EX_TYPE_DIRECT:直连型
直连型又包括: 1对1 和1对N(N对1、 N对N)接收端receive.php代码如下
<?php $connect = new AMQPConnection(); $connect->connect(); $channel = new AMQPChannel($connect); $exchange = new AMQPExchange($channel); $exchange->setName('exchange'); $exchange->setType(AMQP_EX_TYPE_DIRECT); $exchange->declare(); $queue = new AMQPQueue($channel); $queue->setName('logs'); $queue->declare(); $queue->bind('exchange', 'logs'); while (true) { $queue->consume('callback'); } $connection->close(); function callback($envelope, $queue) { var_dump($envelope->getBody()); $queue->nack($envelope->getDeliveryTag()); }
发送端send.php代码如下
<?php $connect = new AMQPConnection(); $connect->connect(); $channel = new AMQPChannel($connect); $exchange = new AMQPExchange($channel); $exchange->setName('exchange'); $exchange->setType(AMQP_EX_TYPE_DIRECT); $exchange->declare(); $exchange->publish('direct type test','logs'); var_dump("Send Message OK"); $connect->disconnect();
运行结果如图所示
创建receive_one.php和receive_two.php 并把send.php代码改成如下代码方便我们观看 receive_one.php 和 receive_two.php 代码相同 或者用dos运行多个接收端
<?php $connect = new AMQPConnection(); $connect->connect(); $channel = new AMQPChannel($connect); $exchange = new AMQPExchange($channel); $exchange->setName('exchange'); $exchange->setType(AMQP_EX_TYPE_DIRECT); $exchange->declare(); $queue = new AMQPQueue($channel); $queue->setName('logs'); @$queue->declare(); $queue->bind('exchange', 'logs'); while (true) { $queue->consume('callback'); } $connection->close(); function callback($envelope, $queue) { var_dump($envelope->getBody()); $queue->nack($envelope->getDeliveryTag()); }
send.php
<?php $connect = new AMQPConnection(); $connect->connect(); $channel = new AMQPChannel($connect); $exchange = new AMQPExchange($channel); $exchange->setName('exchange'); $exchange->setType(AMQP_EX_TYPE_DIRECT); $exchange->declare(); for ($index = 1; $index < 5; $index++) { $exchange->publish($index,'logs'); var_dump("Send:$index"); } $exchange->delete(); $connect->disconnect();
运行结果如下
列队会把消息分配给每一个接收端分配处理这里看似完美但是如果想要更好的处理不同的任务就需要 公平调度
比如当1、3处理的都是简单的人 2、4都是处理的复杂的任务 如果任务过多时 receive_one.php是空闲的而receive_two.php是任务繁重的 我们进行如下测试 send.php改成5改成50
for ($index = 1; $index < 50; $index++) { $exchange->publish($index,'logs'); var_dump("Send:$index"); }
receive_two.php 加上 sleep(3)
function callback($envelope, $queue) { var_dump($envelope->getBody()); sleep(3); $queue->nack($envelope->getDeliveryTag()); }
我们运行程序结果如下
receive_one全部运行完而receive_two才运行一个 之后receive_one一直空闲 我们可以通过 在接收端设置 $channel->setPrefetchCount(1);
任务没人完成前不接收新的消息把消息发送给其他接收端
如下receive_one.php 和 receive_two.php
$channel = new AMQPChannel($connect);
$channel = new AMQPChannel($connect); $channel->setPrefetchCount(1);

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

如何在iPhone上使用滑动在iMessages中回复注意:滑动回复功能仅适用于iOS17中的iMessage对话,不适用于“信息”应用程序中的常规SMS对话。在iPhone上打开“消息”应用。然后,前往iMessage对话,只需在您要回复的iMessage上向右滑动即可。完成此操作后,所选的iMessage将成为焦点,而所有其他消息将在背景中模糊不清。您将看到一个文本框,用于键入回复以及“+”图标,用于访问iMessage应用程序,如“签到”、“位置”、“贴纸”、“照片”等。只需输入您的消息,

消息已发出但被对方拒收是所发送的信息已经成功地从设备发送出去,但由于某种原因,对方并没有接收到这条信息。更具体地说,这通常是因为对方已经设置了某些权限或采取了某些操作,导致你的信息无法被正常接收。

在iOS17中,Apple在其消息应用程序中添加了几项新功能,以使与其他Apple用户的交流更具创意和乐趣。其中一个功能是能够使用表情符号作为贴纸。贴纸已经在消息应用程序中存在多年了,但到目前为止,它们并没有太大变化。这是因为在iOS17中,Apple将所有标准表情符号视为贴纸,允许它们以与实际贴纸相同的方式使用。这本质上意味着您不再局限于在对话中插入它们。现在,您还可以将它们拖到消息气泡上的任何位置。您甚至可以将它们堆叠在一起,以创建小表情符号场景。以下步骤向您展示了它在iOS17中的工作方式

1、被加入黑名单:消息已发出但被对方拒收了一般是被拉黑了,这时你将无法向对方发送消息,对方也无法收到你的消息。2、网络问题:如果接收方的网络状况不佳,或者存在网络故障,就可能导致消息无法成功接收。此时,可以尝试等待网络恢复正常后再次发送消息。3、对方设置了免打扰:如果接收方在微信中设置了免打扰功能,那么在一定时间内,发送方的消息将不会被提醒或显示。

小米14Pro是一款性能配置非常出色的旗舰机型,自从正式发布以来就拥有很高的销量,小米14Pro的很多小功能是会被大家忽视的,比如说是设置来消息亮屏,功能虽小,但是是十分实用的,在使用手机的过程中大家会遇到各种问题,那么小米14Pro怎么设置来消息亮屏呢?小米14Pro怎么设置来消息亮屏?步骤一:打开手机的“设置”应用。步骤二:向下滑动直到找到“锁定屏幕和密码”选项,并点击进入。步骤三:在“锁定屏幕和密码”菜单中,找到并点击“接收通知时亮屏”选项。步骤四:在“接收通知时亮屏”页面中,打开开关以启

JavaQueue队列的性能分析与优化策略摘要:队列(Queue)是在Java中常用的数据结构之一,广泛应用于各种场景中。本文将从性能分析和优化策略两个方面来探讨JavaQueue队列的性能问题,并给出具体的代码示例。引言队列是一种先进先出(FIFO)的数据结构,可用于实现生产者-消费者模式、线程池任务队列等场景。Java提供了多种队列的实现,例如Arr

队列技术在PHP与MySQL中的消息延迟和消息重试的应用摘要:随着Web应用程序的不断发展,对于高并发处理和系统可靠性方面的需求越来越高。队列技术作为一种解决方案,被广泛应用于PHP与MySQL中,以实现消息延迟和消息重试的功能。本文将介绍队列技术在PHP与MySQL中的应用,包括队列的基本原理、使用队列实现消息延迟的方法和使用队列实现消息重试的方法,并给出

随着iOS17的发布,Apple为其移动操作系统添加了丰富的新功能,特性和增强功能。其中之一是如果有人错过您的电话,现在可以离开FaceTimeiPhone视频消息和音频。留言后,您的朋友和家人甚至可以在他们的AppleWatch上播放您的信息,让您更方便地保持联系。在FaceTime通话中留下视频消息的第一步是发起通话。如果另一端的人没有接听电话,屏幕上会出现一个录制视频的选项。点击此选项后,倒计时从5到1开始,之后您可以开始录制消息。该界面是用户友好的,具有“再次呼叫”按钮和“录制视频”按钮
