无法打开绑定到应用程序 header x-match 表达式的接收器

can't open a receiver bound to application header x-match expression

我正在使用 rhea (https://github.com/amqp/rhea),一个 node.js 库来开发 AMQP 1.0 客户端。

我正在尝试使用 x-match 表达式而不是 JMS 表达式来调整 https://github.com/amqp/rhea/tree/master/examples/selector 示例。

目的是实现基于 AMQP 1.0 兼容代理(ActiveMQ、Qpid、...)的 header 路由 机制。

我在 recv.js:

的适当部分试过这段代码
connection.open_receiver({
    source: {
        address: 'amq.match',
        filter: {
            'x-match': 'all',
            value: {
                'nat': 'it',
                'prod': 'a22'
            }
        }
    }
})

收到来自 Qpid Java 代理(版本 7.1.0)的连接错误 "Expected value type is 'Filter' but got 'String' amqp:decode-error"。

根据在 rhea github repo 上收到的回答:

https://github.com/amqp/rhea/issues/200#issuecomment-469220880

The filter needs to be a described value. Try something like this:

connection.open_receiver({
    source: {
        address: 'amq.match',
        filter: {
            'foo': amqp_types.wrap_described({
                'nat': 'it',
                'prod': 'a22',
                'x-match': 'all'
            }, 0x468C00000002)
        }
    }
});

其中:

var amqp_types = require('rhea').types;

这仅适用于 Qpid cpp,不适用于 ActiveMQ 和 Qpid java。