{"record":{"id":"f82e90671ec69fb5","repo":"t8y2/dbx","slug":"rabbitmq-queue-arguments-are-immutable-after-decla","errorCode":null,"errorMessage":"RabbitMQ queue arguments are immutable after declaration; delete and re-declare the queue to change them","messagePattern":"RabbitMQ queue arguments are immutable after declaration; delete and re-declare the queue to change them","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agents/drivers/rabbitmq/main.go","lineNumber":176,"sourceCode":"\t\ts.closeClients()\n\t\treturn okResult(), true, nil\n\tcase \"mq_list_topics\":\n\t\tresult, err := s.listTopics(params)\n\t\treturn result, false, err\n\tcase \"mq_create_topic\":\n\t\tresult, err := s.createTopic(params)\n\t\treturn result, false, err\n\tcase \"mq_delete_topic\":\n\t\tresult, err := s.deleteTopic(params)\n\t\treturn result, false, err\n\tcase \"mq_get_topic_stats\":\n\t\tresult, err := s.getTopicStats(params)\n\t\treturn result, false, err\n\tcase \"mq_get_topic_config\":\n\t\tresult, err := s.getTopicConfig(params)\n\t\treturn result, false, err\n\tcase \"mq_alter_topic_config\":\n\t\treturn nil, false, errors.New(\"RabbitMQ queue arguments are immutable after declaration; delete and re-declare the queue to change them\")\n\tcase \"mq_purge_queue\":\n\t\tresult, err := s.purgeQueue(params)\n\t\treturn result, false, err\n\tcase \"mq_list_consumers\":\n\t\tresult, err := s.listConsumers(params)\n\t\treturn result, false, err\n\tcase \"mq_list_namespaces\":\n\t\tresult, err := s.listNamespaces(params)\n\t\treturn result, false, err\n\tcase \"mq_create_namespace\":\n\t\tresult, err := s.createNamespace(params)\n\t\treturn result, false, err\n\tcase \"mq_delete_namespace\":\n\t\tresult, err := s.deleteNamespace(params)\n\t\treturn result, false, err\n\tcase \"mq_list_exchanges\":\n\t\tresult, err := s.listExchanges(params)\n\t\treturn result, false, err","sourceCodeStart":158,"sourceCodeEnd":194,"githubUrl":"https://github.com/t8y2/dbx/blob/c0390bff16418b651f4728520d99adf8ce48829a/agents/drivers/rabbitmq/main.go#L158-L194","documentation":"AMQP queue arguments (x-arguments like x-message-ttl, dead-letter settings) are fixed once a queue is declared; RabbitMQ rejects a re-declare with different arguments. The driver proactively rejects mq_alter_topic_config so callers get a clear message instead of a PRECONDITION_FAILED channel error.","triggerScenarios":"Calling the mq_alter_topic_config method against this RabbitMQ driver with any params — the method is unconditionally rejected in dispatch.","commonSituations":"Code shared between message brokers (e.g. Kafka/Redis drivers support config changes) hitting the RabbitMQ driver; attempting to change x-max-length or TTL on a live queue.","solutions":["Delete the queue (mq_delete_topic) and re-declare it with the new arguments","Create a new queue with the desired arguments and migrate publishers/consumers to it","Use a policy (rabbitmqctl set_policy) to apply settings like TTL/DLX without re-declaration"],"exampleFix":"// before\nagent.Call(\"mq_alter_topic_config\", map[string]any{\"topic\": \"orders\", \"args\": map[string]any{\"x-message-ttl\": 60000}})\n// after\nagent.Call(\"mq_delete_topic\", map[string]any{\"topic\": \"orders\"})\nagent.Call(\"mq_create_topic\", map[string]any{\"topic\": \"orders\", \"args\": map[string]any{\"x-message-ttl\": 60000}})","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"_, err := agent.Call(\"mq_alter_topic_config\", params)\nif err != nil && strings.Contains(err.Error(), \"immutable after declaration\") {\n\t// handle: delete + re-declare or use policies\n}","preventionTips":["Never call alter-config on the RabbitMQ driver; branch per broker type","Treat queue arguments as immutable in your provisioning code","Use RabbitMQ policies for tunable settings like TTL/DLX"],"tags":["rabbitmq","amqp","unsupported-operation"],"backgroundTag":"queue-arguments-immutable","analyzedSha":"c0390bff16418b651f4728520d99adf8ce48829a","analyzedAt":"2026-09-05T23:05:10.900Z","contentChangedAt":"2026-09-05T23:05:10.900Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}