You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ActiveMQ Artemis禁用队列:生产者发消息无报错,如何触发错误反馈?

让ActiveMQ Artemis对禁用队列的生产请求返回错误

1. 生产者端配置(Java/.NET)

无论是Java JMS客户端还是.NET客户端,都可以通过设置**failIfNoRoute**参数为true,让生产者在消息无法路由到目标队列(包括队列被禁用的场景)时收到明确错误。

Java客户端示例

创建MessageProducer时指定该属性:

Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("myQueue");
MessageProducer producer = session.createProducer(queue);
// 开启路由失败时的错误反馈
producer.setFailIfNoRoute(true);

// 队列禁用时,发送消息会抛出InvalidDestinationException
try {
    producer.send(session.createTextMessage("test"));
} catch (InvalidDestinationException e) {
    System.err.println("队列已禁用,无法发送消息: " + e.getMessage());
}

.NET客户端示例

以NMS客户端为例,在创建生产者时设置对应参数:

ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge);
IQueue queue = session.GetQueue("myQueue");
IMessageProducer producer = session.CreateProducer(queue);
// 开启路由失败时的错误反馈
producer.FailIfNoRoute = true;

try {
    producer.Send(session.CreateTextMessage("test"));
} catch (InvalidDestinationException e) {
    Console.WriteLine("队列已禁用,无法发送消息: " + e.Message);
}

2. Broker端全局/地址级配置

如果希望所有生产者发送到禁用队列时都收到错误,无需逐个修改生产者代码,可以在Broker的broker.xml中配置地址的**send-reject-on-destination-disabled**属性为true。

全局默认配置

修改默认地址设置,对所有队列生效:

<address-settings>
   <address-setting match="#">
      <!-- 目标队列/地址禁用时,拒绝发送请求并返回错误 -->
      <send-reject-on-destination-disabled>true</send-reject-on-destination-disabled>
   </address-setting>
</address-settings>

特定地址配置

仅针对指定队列/地址生效:

<address-settings>
   <address-setting match="myQueue">
      <send-reject-on-destination-disabled>true</send-reject-on-destination-disabled>
   </address-setting>
</address-settings>

配置后,生产者发送消息到禁用队列时,Broker会直接返回错误,客户端会收到对应异常(如Java的InvalidDestinationException、.NET的InvalidDestinationException)。

3. 消费者端的状态感知

队列被禁用后,已创建的消费者会自动断开连接;新消费者尝试连接时,会直接收到InvalidDestinationException(Java)或对应.NET异常,无需额外配置即可感知队列状态。


内容的提问来源于stack exchange,提问作者Priyabrat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:56:06