【问题标题】:Rabbitmq understanding channel, consumer and connection statisticsRabbitmq 理解通道、消费者和连接统计
【发布时间】:2014-06-17 12:33:08
【问题描述】:

我的问题与管理插件中显示的统计信息有关。不使用的时候 rabbitmq stats 是这样的:

我正在使用 rabbitmq 创建一个 REQ/REP 套接字。对于每个连接的客户端,都会创建一个新队列。所以我们现在有 4 个队列:

但是我不明白其他数字。

  1. 为什么最初有 8 个交易所? (全新安装后)
  2. 为什么最初有 2 个队列? (全新安装后)
  3. 为什么其他数字从 0 跳到 4,而我只有 2 个客户?

这是因为 REQ/REP 吗?

更新:我有两个应用程序相互通信。一方面我有

var context = require('rabbit.js').createContext('amqp://localhost');
var rep = context.socket('REP', {
    prefetch: 1,
    persistent: false
});
rep.connect(someIdentifier);
rep.setEncoding('utf8');

rep.on('data', function(data) {
    //got a request
});

另一方面:

var context = require('rabbit.js').createContext('amqp://localhost');
var req = context.socket('REQ');
req.setEncoding('utf8');
req.connect(sameIdAsAbove);
req.on('data', function(data) {
    //got a response
});

【问题讨论】:

    标签: node.js rabbitmq


    【解决方案1】:

    6 个默认交换是每种交换类型之一 + 它们的别名交换(请参阅 Exchanges and Exchange Types section in AMQP 0-9-1 Model Explained

    接下来的两个交换是amq.rabbitmq.tracetopic 类型),一个来自Firehose Traceramqp.rabbitmq.log(也是topic 类型),您可以在调试期间使用日志条目(只需通过@987654328 绑定)以@键为例)。

    顺便说一句,这些交流是在每个虚拟主机中创建的。 amq 前缀来自 AMQP 约定,以 amq 前缀命名 AMQP 相关实体。 rabbitmq 部分代表 RabbitMQ 特定的功能。

    所以这都是关于约定的。

    至于 2 个默认队列,这实际上取决于您的安装类型,而默认配置可能会有所不同。 Vanilla RabbitMQ 安装没有队列。

    如果您有 4 个保持连接状态的活跃消费者(等待新消息出现在队列中的进程),他们将每个连接至少使用一个连接,每个连接使用一个通道。

    如果没有看到实际代码,很难说为什么您的队列数会发生变化。

    更新:

    4 个连接和 4 个通道(要与 AMQP 代理通信,您需要打开至少一个通道,它在 AMQP 协议的4.3 Connection Multiplexing 部分中进行了描述)来自底层实现创建双工流(每个应用程序实例一个),这可能使用两个连接使读写事件独立发生。

    P.S.:实际上,全新安装可能会导入预定义配置并配置许多其他选项,包括访问策略、虚拟主机、用户、交换、队列、与 HA 的绑定、集群等。

    【讨论】:

    • +1 谢谢!!我用一些代码更新了我的问题。也许你能解释一下为什么我有 4 个连接?
    • 用关于渠道和连接的解释更新了我的答案。至于队列 - 在 cmets 中发布初始队列名称,我猜它们是由您的应用程序或安装程序创建的。
    猜你喜欢
    • 2017-03-13
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    相关资源
    最近更新 更多