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

MassTransit对接ActiveMQ Artemis VirtualTopic队列自动删除如何解决

解决方法

你使用MassTransit封装的OpenWire NMS客户端对接ActiveMQ Artemis时,可通过以下配置实现队列不自动删除:

  • 必须在接收端点配置中同时显式设置Durable = true和AutoDelete = false,仅配置自动删除开关不会生效,同时可通过SetQueueAttribute方法手动补充Artemis的队列自动删除规则属性,修改后的代码如下:
cfg.ReceiveEndpoint("ExampleConsumer", e =>
{
    e.ConfigureConsumeTopology = false;
    // 配置队列持久化
    e.Durable = true;
    // 关闭队列自动删除
    e.AutoDelete = false;
    // 手动配置Artemis队列自动删除相关属性
    e.SetQueueAttribute("auto-delete", "false");
    e.SetQueueAttribute("auto-delete-delay", "0");
    e.SetQueueAttribute("auto-delete-message-count", "-1");
    
    e.Bind("VirtualTopic.Example");
});
  • 配置更新后需要先删除Artemis broker上已经存在的同名旧队列,已有队列的属性不会被客户端新配置覆盖,新生成的队列即可在消费者离线时保留,不会丢失消息。
  • 若上述配置仍不生效,可直接将参数拼接到队列名称后,OpenWire客户端会自动识别队列名称携带的查询参数作为队列属性:
cfg.ReceiveEndpoint("ExampleConsumer?auto-delete=false&auto-delete-message-count=-1", e =>
{
    e.ConfigureConsumeTopology = false;
    e.Durable = true;
    e.AutoDelete = false;
    e.Bind("VirtualTopic.Example");
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:06:01