我继承了一些传统的RabbitMQ代码,这给我带来了一些严重的麻烦。任何人都可以帮助,理想情况下指向一些“官方”文档在哪里我可以浏览类似的问题?RabbitMQ多线程通道和队列绑定
我们创造一些渠道获得来自工人,其执行使用渠道,像这样一个搜索响应:
channelIn.queueDeclare("", false, false, true, null);
channelIn.queueBind("", AmqpClient.NAME_EXCHANGE,
AmqpClient.ROUTING_KEY_ROOT_INCOMING + uniqueId);
我从浏览邮件列表和论坛的理解是,
- 声明队列空名称允许服务器自动生成一个唯一的名称,并且
- 队列必须具有全局唯一的名称。
这是真的吗?
此外,在上述的第二行,我的基于博客和邮件列表的一些自由主义的解释的理解与空队列名称queuebind自动绑定到最后创建的队列。这看起来不错,因为那样你就不必从自己生成的DeclareOK对象中拉出自动生成的名字。
这是真的吗?如果是这样,这将工作在多线程环境?
I.e.是否有可能某个通道将自己绑定到另一个通道的队列,那么如果该另一个通道关闭,绑定不正确的通道会尝试使用该队列时出现错误? (请注意,队列是使用autodelete = true创建的。)我的测试让我想到是的,但我不确定问题出在哪里。
你是对的。这并不糟糕。以为我不得不用返回对象做一些查找。很高兴知道预期的行为,因为我的代码库中还有其他类似的模糊行。 – milletron
如果有类似的模糊线条,我会优先考虑寻找方法,像这样去除模糊性。也许最初的代码是为早期版本的API编写的,现在有更好的方法来处理这种情况。总的来说,如果使用正确,rabbitMQ客户端应该是线程安全的。 – robthewolf
真的希望找到一个指向一些文档的指针(即不仅仅是StackOverflow文章和RabbitMQ列表)关于如何处理错误,连接关闭时会发生什么,如果尝试打开两个通道会发生什么......这种排序的东西。我想我会继续通过试验和错误一件一件地移植东西。 – milletron