首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >:RPC -> RPC队列会留下unack消息。

:RPC -> RPC队列会留下unack消息。
EN

Stack Overflow用户
提问于 2015-07-14 22:46:47
回答 1查看 427关注 0票数 0

我有几个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发布/消费过程而发生的事情。

谢谢你坚持到底..。任何帮助都很感激!

-迈克

EN

回答 1

Stack Overflow用户

发布于 2015-07-14 23:27:28

在在Broker中实例化的客户端类中,我在wait()之后并在返回有效负载之前添加了一个显式通道close()调用。

这将清理amqp生成的队列。

添加一个显式连接关闭会导致代理在第二次迭代中崩溃(尽管所有已发布的示例都显示了这一点),所以我将忽略它,让它完成它的事情.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31418697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档