diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index f3fcb8d..8c2f024 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -74,6 +74,7 @@ protected function addCommands(ArrayNodeDefinition $node) ->children() ->scalarNode('rabbitmq_consumer')->defaultValue('rabbitmq:consumer')->end() ->scalarNode('rabbitmq_multiple_consumer')->defaultValue('rabbitmq:multiple-consumer')->end() + ->scalarNode('rabbitmq_rpc_server')->defaultValue('rabbitmq:rpc-server')->end() ->end() ->end() ->end() diff --git a/DependencyInjection/RabbitMqSupervisorExtension.php b/DependencyInjection/RabbitMqSupervisorExtension.php index 5896e57..b7e0279 100644 --- a/DependencyInjection/RabbitMqSupervisorExtension.php +++ b/DependencyInjection/RabbitMqSupervisorExtension.php @@ -65,7 +65,7 @@ public function load(array $configs, ContainerBuilder $container) public function prepend(ContainerBuilder $container) { - $attributeNames = array('consumers', 'multiple_consumers'); + $attributeNames = array('consumers', 'multiple_consumers', 'rpc_servers'); $attributes = array_combine($attributeNames, array_fill(0, count($attributeNames), [])); foreach ($container->getExtensions() as $name => $extension) { diff --git a/Resources/config/services.yml b/Resources/config/services.yml index 2662ac5..88646ac 100644 --- a/Resources/config/services.yml +++ b/Resources/config/services.yml @@ -12,6 +12,7 @@ services: - "%phobetor_rabbitmq_supervisor.commands%" - "%phobetor_rabbitmq_supervisor.consumers%" - "%phobetor_rabbitmq_supervisor.multiple_consumers%" + - "%phobetor_rabbitmq_supervisor.rpc_servers%" - "%phobetor_rabbitmq_supervisor.config%" - "%kernel.environment%" diff --git a/Services/RabbitMqSupervisor.php b/Services/RabbitMqSupervisor.php index 3f9e25c..8154463 100644 --- a/Services/RabbitMqSupervisor.php +++ b/Services/RabbitMqSupervisor.php @@ -39,6 +39,11 @@ class RabbitMqSupervisor */ private $config; + /** + * @var array + */ + private $rpcServers; + /** * @var string */ @@ -52,16 +57,18 @@ class RabbitMqSupervisor * @param array $commands * @param array $consumers * @param array $multipleConsumers + * @param array $rpcServers * @param array $config * @param string $environment */ - public function __construct(Supervisor $supervisor, array $paths, array $commands, $consumers, $multipleConsumers, $config, $environment) + public function __construct(Supervisor $supervisor, EngineInterface $templating, array $paths, array $commands, $consumers, $multipleConsumers, $rpcServers, $config) { $this->supervisor = $supervisor; $this->paths = $paths; $this->commands = $commands; $this->consumers = $consumers; $this->multipleConsumers = $multipleConsumers; + $this->rpcServers = $rpcServers; $this->config = $config; $this->environment = $environment; } @@ -112,6 +119,9 @@ public function build() // generate program configuration files for all multiple consumers $this->generateWorkerConfigurations(array_keys($this->multipleConsumers), $this->commands['rabbitmq_multiple_consumer']); + //generate program configuration files for all rpc_server consumers + $this->generateWorkerConfigurations(array_keys($this->rpcServers), $this->commands['rabbitmq_rpc_server']); + // start supervisor and reload configuration $this->start(); $this->supervisor->reloadAndUpdate(); @@ -300,17 +310,23 @@ private function generateWorkerConfigurations($names, $baseCommand) if (!empty($messages)) { $flags['messages'] = sprintf('--messages=%d', $messages); } - $memoryLimit = $this->getConsumerOption($name, 'memory-limit'); - if (!empty($memoryLimit)) { - $flags['memory-limit'] = sprintf('--memory-limit=%d', $memoryLimit); - } + $debug = $this->getConsumerOption($name, 'debug'); if (!empty($debug)) { $flags['debug'] = '--debug'; } - $withoutSignals = $this->getConsumerOption($name, 'without-signals'); - if (!empty($withoutSignals)) { - $flags['without-signals'] = '--without-signals'; + + //rabbitmq:rpc-server does not support options below + if ($baseCommand !== 'rabbitmq:rpc-server') { + $memoryLimit = $this->getConsumerOption($name, 'memory-limit'); + if (!empty($memoryLimit)) { + $flags['memory-limit'] = sprintf('--memory-limit=%d', $memoryLimit); + } + + $withoutSignals = $this->getConsumerOption($name, 'without-signals'); + if (!empty($withoutSignals)) { + $flags['without-signals'] = '--without-signals'; + } } $command = sprintf('%s %s %s', $commandName, $name, implode(' ', $flags));