<commit_before>While Ravens will probably not directly have a config file (since it is a library, not an
application), this is what I am thinking the configuration concept / objects will be based off: 

```php
$config['exchanges'] = [
    'buffer' => [
        'host'       => 'rabbit-hodor-buffer',
        'port'       => '',
        'username'   => '',
        'password'   => '',
        'exchange'   => 'hodor-buffer-exchange'
        'publishers' => [
            'buffer' => ['subscribers' => ['buffer']],
        ],
        'subscribers' => [
            'buffer' => ['queue_name' => 'hodor-buffer'],
        ],
    ],
    'worker' => [
        'host'       => 'rabbit-hodor-worker',
        'port'       => '',
        'username'   => '',
        'password'   => '',
        'exchange'   => 'hodor-worker-exchange',
        'publishers' => [
            'worker-default' => [
                'subscribers' => ['worker-default', 'logger-worker']
            ],
            'worker-long-running' => [
                'subscribers' => ['worker-long-running', 'logger-worker']
            ],
        ],
        'subscribers' => [
            'worker-default' => ['queue_name' => 'hodor-worker-default'],
            'worker-long-running' => ['queue_name' => 'hodor-worker-long-running'],
            'logger-worker' => ['queue_name' => 'hodor-logger-worker'],
        ],
    ],

    'manage' => [
        'host'       => 'rabbit-hodor-manage',
        'port'       => '',
        'username'   => '',
        'password'   => '',
        'exchange'   => 'hodor-manage-exchange'
        'publishers' => [
            'process-killer' => [
                'subscribers' => env('HODOR_WORKER_SERVER') ? ['process-killer'] : []
            ],
        ],
        'subscribers' => [
            'process-killer' => [
                'queue_name' => 'hodor-process-killer-' . gethostname(),
                'expiration' => 300
            ],
        ],
    ],
];
```

So with this idea, DeliveryStrategy would take a list of queues and then the consumer would
need to know which queue it is consuming from (not via the DeliveryStrategy).

```php
$exchange = $producer->getExchange('worker');
$exchange->push('worker-default', new OutgoingMessage());

$queue = $consumer->getQueue('worker-default');
$queue->consume(
    function (IncomingMessage $message) {
        $message->acknowledge();
    },
    ['max_message_count' => 3]
);
```<commit_msg>Brainstorm some more potential producer options<commit_after>While Ravens will probably not directly have a config file (since it is a library, not an
application), this is what I am thinking the configuration concept / objects will be based off: 

```php
$config['exchanges'] = [
    'buffer' => [
        'host'       => 'rabbit-hodor-buffer',
        'port'       => '',
        'username'   => '',
        'password'   => '',
        'exchange'   => 'hodor-buffer-exchange'
        'publishers' => [
            'buffer' => ['subscribers' => ['buffer']],
        ],
        'subscribers' => [
            'buffer' => ['queue_name' => 'hodor-buffer'],
        ],
    ],
    'worker' => [
        'host'       => 'rabbit-hodor-worker',
        'port'       => '',
        'username'   => '',
        'password'   => '',
        'exchange'   => 'hodor-worker-exchange',
        'publishers' => [
            'worker-default' => [
                'subscribers' => ['worker-default', 'logger-worker']
            ],
            'worker-long-running' => [
                'subscribers' => ['worker-long-running', 'logger-worker']
            ],
        ],
        'subscribers' => [
            'worker-default' => ['queue_name' => 'hodor-worker-default'],
            'worker-long-running' => ['queue_name' => 'hodor-worker-long-running'],
            'logger-worker' => ['queue_name' => 'hodor-logger-worker'],
        ],
    ],

    'manage' => [
        'host'       => 'rabbit-hodor-manage',
        'port'       => '',
        'username'   => '',
        'password'   => '',
        'exchange'   => 'hodor-manage-exchange'
        'publishers' => [
            'process-killer' => [
                'subscribers' => env('HODOR_WORKER_SERVER') ? ['process-killer'] : []
            ],
        ],
        'subscribers' => [
            'process-killer' => [
                'queue_name' => 'hodor-process-killer-' . gethostname(),
                'expiration' => 300
            ],
        ],
    ],
];
```

So with this idea, DeliveryStrategy would take a list of queues and then the consumer would
need to know which queue it is consuming from (not via the DeliveryStrategy).

```php
$exchange = $producer->getExchange('worker');
$exchange->push('worker-default', new OutgoingMessage());

$exchange = $producer->getExchange('worker');
$exchange->push(new OutgoingMessage(['the' => 'message'], 'worker-default'));

$route = $producer->getRoute('worker', 'worker-default');
$route->push(new OutgoingMessage());

$queue = $consumer->getQueue('worker-default');
$queue->consume(
    function (IncomingMessage $message) {
        $message->acknowledge();
    },
    ['max_message_count' => 3]
);
```
{'fraction_non_alphanumeric': 0.18206574596382027, 'fraction_numerical': 0.0015561174868702586, 'mean_word_length': 2.017605633802817, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 106, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3458021', 'n_tokens_mistral': 1583, 'n_tokens_neox': 1489, 'n_words': 298}