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
相关产品推荐
相关产品推荐

