Skip to content

Commit

Permalink
Merge pull request #4 from qpautrat/handle_serialize_publisher
Browse files Browse the repository at this point in the history
feat: Chose which serializing strategy by configuration.
  • Loading branch information
qpautrat authored Jul 16, 2018
2 parents e310ac9 + a6eae78 commit 6183317
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 6 deletions.
5 changes: 5 additions & 0 deletions src/DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Evaneos\BurrowBundle\DependencyInjection;

use Evaneos\BurrowBundle\PublisherFactory;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;

Expand Down Expand Up @@ -48,6 +49,10 @@ public function getConfigTreeBuilder()
->children()
->scalarNode('driver')->end()
->scalarNode('exchange')->end()
->enumNode('serializingStrategy')
->values(PublisherFactory::$SERIALIZING_STRATEGIES)
->defaultValue(PublisherFactory::DEFAULT_SERIALIZING_STRATEGY)
->end()
->end()
->end()
->end()
Expand Down
12 changes: 8 additions & 4 deletions src/DependencyInjection/EvaneosBurrowExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use Burrow\Driver;
use Burrow\Driver\DriverFactory;
use Burrow\Publisher\AsyncPublisher;
use Evaneos\BurrowBundle\PublisherFactory;
use Evaneos\BurrowBundle\WorkerFactory;
use Evaneos\Daemon\CLI\DaemonWorkerCommand;
use Evaneos\Daemon\Worker;
Expand Down Expand Up @@ -49,10 +50,13 @@ public function load(array $configs, ContainerBuilder $container)
}

foreach ($config['publishers'] as $name => $value) {
$container
->register(sprintf('evaneos_burrow.publisher.%s', $name), AsyncPublisher::class)
->addArgument(new Reference(sprintf('evaneos_burrow.driver.%s', $value['driver'])))
->addArgument($value['exchange']);
$definition = new Definition(AsyncPublisher::class, [
new Reference(sprintf('evaneos_burrow.driver.%s', $value['driver'])),
$value['exchange'],
$value['serializingStrategy']
]);
$definition->setFactory([PublisherFactory::class, 'buildAsync']);
$container->setDefinition(sprintf('evaneos_burrow.publisher.%s', $name), $definition);
}

foreach ($config['workers'] as $name => $value) {
Expand Down
38 changes: 38 additions & 0 deletions src/PublisherFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

namespace Evaneos\BurrowBundle;

use Burrow\Driver;
use Burrow\Publisher\AsyncPublisher;
use Burrow\Publisher\SerializingPublisher;
use Burrow\Serializer\JsonSerializer;
use Burrow\Serializer\PhpSerializer;

class PublisherFactory
{
const SERIALIZING_STRATEGY_NONE = 'none';
const SERIALIZING_STRATEGY_SERIALIZE = 'serialize';
const SERIALIZING_STRATEGY_JSON = 'json';
const DEFAULT_SERIALIZING_STRATEGY = self::SERIALIZING_STRATEGY_JSON;

public static $SERIALIZING_STRATEGIES = [self::SERIALIZING_STRATEGY_NONE, self::SERIALIZING_STRATEGY_SERIALIZE, self::SERIALIZING_STRATEGY_JSON];

/**
* @param Driver $driver
* @param string $exchangeName
* @param string $serializingStrategy
* @return AsyncPublisher|SerializingPublisher
*/
public static function buildAsync(Driver $driver, $exchangeName, $serializingStrategy)
{
$publisher = new AsyncPublisher($driver, $exchangeName);

if (self::SERIALIZING_STRATEGY_NONE === $serializingStrategy) {
return $publisher;
} elseif (self::SERIALIZING_STRATEGY_JSON === $serializingStrategy) {
return new SerializingPublisher($publisher, new JsonSerializer());
} else {
return new SerializingPublisher($publisher, new PhpSerializer());
}
}
}
2 changes: 1 addition & 1 deletion tests/SomeConsumer.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ public function consume($message, array $headers = [])
{
// Do nothing
}
}
}
2 changes: 1 addition & 1 deletion tests/app/config/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@ evaneos_burrow:

services:
some_consumer:
class: Tests\SomeConsumer
class: Tests\SomeConsumer

0 comments on commit 6183317

Please sign in to comment.