{"record":{"id":"e6fd1e7cedc6c0cb","repo":"openimsdk/open-im-server","slug":"unsupported-queue-engine-s","errorCode":null,"errorMessage":"unsupported queue engine %s","messagePattern":"unsupported queue engine (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/mqbuild/builder.go","lineNumber":51,"sourceCode":")\n\nfunc NewBuilder(queue config.EngineSelector, kafka *config.Kafka, redis redis.UniversalClient) (Builder, error) {\n\tengine, err := config.ValidateQueueEngine(queue.Engine, config.Standalone())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch engine {\n\tcase config.QueueEngineKafka:\n\t\tif kafka == nil {\n\t\t\treturn nil, fmt.Errorf(\"nil kafka config\")\n\t\t}\n\t\treturn newKafkaBuilder(kafka), nil\n\tcase config.QueueEngineRedis:\n\t\treturn newRedisBuilder(redis), nil\n\tcase config.QueueEngineMemory:\n\t\treturn standaloneBuilder{}, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unsupported queue engine %s\", queue.Engine)\n\t}\n}\n\nfunc newKafkaBuilder(kafka *config.Kafka) Builder {\n\ttopics := MergeTopics(KafkaTopics(kafka))\n\treturn &kafkaBuilder{\n\t\taddr:         kafka.Address,\n\t\tconfig:       kafka.Build(),\n\t\tlogicalTopic: LogicalTopicNames(topics),\n\t\ttopicGroupID: TopicGroupID(topics),\n\t}\n}\n\nfunc newRedisBuilder(redis redis.UniversalClient) Builder {\n\treturn redismq.NewBuilder(redis, TopicGroupID(DefaultTopics()), redismq.Config{StreamPrefix: \"mq:\"})\n}\n\ntype QueueTopicsConfig struct {","sourceCodeStart":33,"sourceCodeEnd":69,"githubUrl":"https://github.com/openimsdk/open-im-server/blob/175a7bb0673eca18e9d1b10bff4f728da6b1b513/pkg/mqbuild/builder.go#L33-L69","documentation":"NewBuilder falls through to its default case when queue.Engine is none of kafka/redis/memory, returning 'unsupported queue engine %s'. The configured engine string does not match any known QueueEngine constant.","triggerScenarios":"queue config with an Engine value not equal to config.QueueEngineKafka, QueueEngineRedis, or QueueEngineMemory (typo, empty string, or older/newer config value).","commonSituations":"Typo like 'kafak' or 'Kafka' (case mismatch); empty engine field; config from a different version of the software that had a different engine name.","solutions":["Set queue.engine to one of: kafka, redis, memory (exact constant values)","Check for typos and case in the config value","Verify config compatibility with the binary's version"],"exampleFix":"// before\nqueue:\n  engine: rabbitmq\n// after\nqueue:\n  engine: kafka","handlingStrategy":"validation","validationCode":"switch cfg.Queue.Engine {\ncase config.QueueEngineKafka, config.QueueEngineRedis, config.QueueEngineMemory:\n    // ok\ndefault:\n    return fmt.Errorf(\"invalid queue.engine %q; must be kafka|redis|memory\", cfg.Queue.Engine)\n}","typeGuard":null,"tryCatchPattern":"b, err := mqbuild.NewBuilder(redis, kafka, queue, opts)\nif err != nil && strings.Contains(err.Error(), \"unsupported queue engine\") {\n    // surface allowed values to the operator\n}","preventionTips":["Centralize engine name constants and validate config against them","Reject unknown engine values at config load time","Document allowed engine values for operators"],"tags":["config","messaging","validation"],"backgroundTag":"unsupported-enum-value","analyzedSha":"175a7bb0673eca18e9d1b10bff4f728da6b1b513","analyzedAt":"2026-09-04T16:52:56.821Z","contentChangedAt":"2026-09-04T16:52:56.821Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}