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

  1. Set queue.engine to one of: kafka, redis, memory (exact constant values)
  2. Check for typos and case in the config value
  3. 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

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.