openimsdk/open-im-server · error
unsupported queue engine %s
Error message
unsupported queue engine %s
What it means
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.
Source
Thrown at pkg/mqbuild/builder.go:51
)
func NewBuilder(queue config.EngineSelector, kafka *config.Kafka, redis redis.UniversalClient) (Builder, error) {
engine, err := config.ValidateQueueEngine(queue.Engine, config.Standalone())
if err != nil {
return nil, err
}
switch engine {
case config.QueueEngineKafka:
if kafka == nil {
return nil, fmt.Errorf("nil kafka config")
}
return newKafkaBuilder(kafka), nil
case config.QueueEngineRedis:
return newRedisBuilder(redis), nil
case config.QueueEngineMemory:
return standaloneBuilder{}, nil
default:
return nil, fmt.Errorf("unsupported queue engine %s", queue.Engine)
}
}
func newKafkaBuilder(kafka *config.Kafka) Builder {
topics := MergeTopics(KafkaTopics(kafka))
return &kafkaBuilder{
addr: kafka.Address,
config: kafka.Build(),
logicalTopic: LogicalTopicNames(topics),
topicGroupID: TopicGroupID(topics),
}
}
func newRedisBuilder(redis redis.UniversalClient) Builder {
return redismq.NewBuilder(redis, TopicGroupID(DefaultTopics()), redismq.Config{StreamPrefix: "mq:"})
}
type QueueTopicsConfig struct {View on GitHub (pinned to 175a7bb067)
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
Example fix
// before queue: engine: rabbitmq // after queue: engine: kafka
Defensive patterns
Strategy: validation
Validate before calling
switch cfg.Queue.Engine {
case config.QueueEngineKafka, config.QueueEngineRedis, config.QueueEngineMemory:
// ok
default:
return fmt.Errorf("invalid queue.engine %q; must be kafka|redis|memory", cfg.Queue.Engine)
} Try / catch
b, err := mqbuild.NewBuilder(redis, kafka, queue, opts)
if err != nil && strings.Contains(err.Error(), "unsupported queue engine") {
// surface allowed values to the operator
} Prevention
- Centralize engine name constants and validate config against them
- Reject unknown engine values at config load time
- Document allowed engine values for operators
When it happens
Trigger: queue config with an Engine value not equal to config.QueueEngineKafka, QueueEngineRedis, or QueueEngineMemory (typo, empty string, or older/newer config value).
Common situations: Typo like 'kafak' or 'Kafka' (case mismatch); empty engine field; config from a different version of the software that had a different engine name.
Related errors
AI-assisted analysis of openimsdk/open-im-server@175a7bb067 (2026-09-04).
Data as JSON: /api/errors/e6fd1e7cedc6c0cb.
Report an issue: GitHub.