我有几个PHP类型的消费者(代理),它们是为事件消费而附加到RMQ的。
一个代理位于远程系统上-但是,出于开发/测试的目的,我在本地运行“远程”代理。
有面向应用程序的代理,其中一个( brokers )处理请求,在处理过程中,通过包含的类创建一个新的与远程代理的AMQP连接,将请求发布到远程代理(Brokers)。
Broker使用请求,将返回的有效负载发布回broker并调用basic_ack()方法。
Broker从Broker中解压返回有效负载,并将其有效负载返回给PHP客户端,该客户端将正确显示结果。
概述:
testProgram -->实例化testClass1,它打印出回调队列名称:(ex: amq.gen-6_EhL_eb3HcLiiOb-TUNRA),发布对代理Au的请求
代理Au ->实例化class2,它输出回调队列名称:(ex: amq.gen-J0jhxeMAf1XZSbHZJ8NZ3g),向broker Vu发布请求。
broker >做一些事情(成功),向broker返回有效负载,调用basic_ack()
broker >解码返回有效载荷,并生成自己的testProgram返回有效载荷,并调用basic_ack()。
testProgram ->显示结果和结束
我在RMQ管理控制台的队列选项卡中看到的是:
我所有已连接的代理(AD = true)和(amq.gen-J0jhxeMAf1XZSbHZJ8NZ3g)显示就绪: 0,Unacked: 1,总计:1
对于我提交的同样多的请求,生成的回调队列相应地增加。
在broker中,我有一个ping事件处理程序--它所做的就是说“是的--我在这里”并返回一个true。此事件还生成孤立生成的回调队列孤儿。
我已经在代理中注册了我的所有关闭方法--如果我试图显式地关闭连接-客户机中的通道/连接(遵循$channel->wait()),它第一次工作并在第二次执行时使代理崩溃。
如果我运行一个直接连接到broker并提交相同事件请求的测试程序,那么就不会产生amqp生成的队列成为孤儿。这肯定是因为broker发布/消费过程而发生的事情。
谢谢你坚持到底..。任何帮助都很感激!
-迈克
发布于 2015-07-14 23:27:28
在在Broker中实例化的客户端类中,我在wait()之后并在返回有效负载之前添加了一个显式通道close()调用。
这将清理amqp生成的队列。
添加一个显式连接关闭会导致代理在第二次迭代中崩溃(尽管所有已发布的示例都显示了这一点),所以我将忽略它,让它完成它的事情.
https://stackoverflow.com/questions/31418697
复制相似问题