为什么ApacheQPID代理队列声明参数;x-qpid-dlq-启用;功能不正常?

为什么ApacheQPID代理队列声明参数;x-qpid-dlq-启用;功能不正常?,apache,amqp,qpid,dead-letter,Apache,Amqp,Qpid,Dead Letter,我正在尝试将ApacheQPID代理(版本7.1.6)作为嵌入式内存代理运行,并在代理上声明一个队列,队列声明选项x-QPID-dlq-enabled设置为“true” public void createQueues()引发异常{ //连接到本地主机上运行的嵌入式代理 ConnectionFactory工厂=createConnectionFactory(); Connection Connection=factory.newConnection(); Channel=connection.

我正在尝试将ApacheQPID代理(版本7.1.6)作为嵌入式内存代理运行,并在代理上声明一个队列,队列声明选项x-QPID-dlq-enabled设置为“true”


public void createQueues()引发异常{
//连接到本地主机上运行的嵌入式代理
ConnectionFactory工厂=createConnectionFactory();
Connection Connection=factory.newConnection();
Channel=connection.createChannel();
Map args=new HashMap();
参数put(“x-qpid-dlq-enabled”,true);
queueDeclare(“测试队列”,真,假,假,args);
根据此处参数“x-qpid-dlq-enabled”的条目:

根据第9.4.3节所述的行为:

预期的行为是,如果使用该选项,将自动创建死信交换和死信队列。从上面的第二个链接:

“DLQ功能导致死信交换和死信队列的生成。这两个队列被命名为convention QueueName_DLE和QueueName_DLQ

创建新队列或使用队列声明属性x-qpid-dlq-enabled时,可以启用dlq。“

但是,我在尝试使用该declare参数声明队列时收到以下错误


    Exception in thread "main" java.io.IOException
        at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:129)
        at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:125)
        at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:147)
        at com.rabbitmq.client.impl.ChannelN.queueDeclare(ChannelN.java:968)
        at com.rabbitmq.client.impl.recovery.AutorecoveringChannel.queueDeclare(AutorecoveringChannel.java:333)
        at BrokerConnector.createQueues(BrokerConnector.java:43)
        at Main.main(Main.java:11)
    Caused by: com.rabbitmq.client.ShutdownSignalException: connection error; protocol method: #method<connection.close>(reply-code=404, reply-text=Unknown alternate exchange: 'Test Queue_DLQ', class-id=50, method-id=10)
        at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66)


线程“main”java.io.IOException中的异常
位于com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:129)
位于com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:125)
位于com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:147)
位于com.rabbitmq.client.impl.ChannelN.queueDeclare(ChannelN.java:968)
位于com.rabbitmq.client.impl.recovery.AutorecoveringChannel.queueDeclare(AutorecoveringChannel.java:333)
在BrokerConnector.createQueues(BrokerConnector.java:43)
Main.Main(Main.java:11)
原因:com.rabbitmq.client.ShutdownSignalException:连接错误;协议方法:#方法(回复代码=404,回复文本=Unknown备用交换:'Test Queue_DLQ',class id=50,方法id=10)
位于com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66)
我使用RabbitMQ客户端创建到QPID代理的AMQP连接,并且客户端和代理都使用AMQ协议v 0_8。为什么没有按照QPID文档中的指定自动创建相应的exchange,为什么exchange名称的后缀是“_DLQ”,而不是“_DLE”,也如文档中所述。我知道Java版本6的Qpid中记录了该行为,我正在运行版本7.1.6,但后续文档中没有发布说明表明该行为应该有所不同,版本7.1.6文档仍然指示
“x-Qpid-dlq-enable”
参数不受支持


有什么建议或想法吗?

Qpid Broker J的7.0版中更改了配置死信队列的方式。不幸的是,v6机制中似乎还剩下一些代码(和文档),这导致了您看到的错误

从版本7开始,您可以直接在队列上设置DLQ(或者更准确地说,设置备用绑定),而无需备用交换

qpid上的以下邮件交换-users@apache.org如果您想自动实现这一点,邮件列表可能会很有用:

很抱歉我之前(而且完全不正确)的猜测,我承认部分代码不是我经常看到的


    Exception in thread "main" java.io.IOException
        at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:129)
        at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:125)
        at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:147)
        at com.rabbitmq.client.impl.ChannelN.queueDeclare(ChannelN.java:968)
        at com.rabbitmq.client.impl.recovery.AutorecoveringChannel.queueDeclare(AutorecoveringChannel.java:333)
        at BrokerConnector.createQueues(BrokerConnector.java:43)
        at Main.main(Main.java:11)
    Caused by: com.rabbitmq.client.ShutdownSignalException: connection error; protocol method: #method<connection.close>(reply-code=404, reply-text=Unknown alternate exchange: 'Test Queue_DLQ', class-id=50, method-id=10)
        at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66)