createDriverFromConfig method

  1. @override
QueueDriver createDriverFromConfig(
  1. String driverType,
  2. Map<String, dynamic> settings
)
override

Creates a queue driver instance from configuration. Throws QueueException if driver type is unknown or configuration is invalid.

Implementation

@override
QueueDriver createDriverFromConfig(
  String driverType,
  Map<String, dynamic> settings,
) {
  final driverName = settings['name'] as String? ?? driverType;
  final trackMetrics = settings['track_metrics'] as bool? ?? true;
  final useDLQ = settings['use_dlq'] as bool? ?? true;
  final maxRetries = settings['max_retries'] as int? ?? 3;
  final timeout = settings['timeout'] as int?;

  final config = DriverConfig(
    name: driverName,
    trackMetrics: trackMetrics,
    useDLQ: useDLQ,
    maxRetries: maxRetries,
    defaultJobTimeout: timeout != null ? Duration(seconds: timeout) : null,
  );

  switch (driverType.toLowerCase()) {
    case 'memory':
    case 'in_memory':
      return InMemoryDriver(config: config);

    case 'sync':
    case 'synchronous':
      return SynchronousDriver(config: config);

    case 'file':
    case 'file_storage':
      final path = settings['path'] as String? ?? './storage/queue';
      return FileStorageDriver(
        config: config,
        storagePath: path,
      );

    case 'redis':
    case 'redis_storage':
      final host = settings['host'] as String? ?? 'localhost';
      final port = settings['port'] as int? ?? 6379;
      final password = settings['password'] as String?;
      final queueName = settings['queue_name'] as String? ?? config.name;

      return RedisStorageDriver(
        config: config,
        host: host,
        port: port,
        password: password,
        queueName: queueName,
      );

    default:
      throw QueueException('Unknown queue driver: $driverType');
  }
}