vendor/php-amqplib/rabbitmq-bundle/DependencyInjection/Configuration.php line 35

Open in your IDE?
  1. <?php
  2. namespace OldSound\RabbitMqBundle\DependencyInjection;
  3. use Symfony\Component\Config\Definition\Builder\TreeBuilder;
  4. use Symfony\Component\Config\Definition\ConfigurationInterface;
  5. use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
  6. /**
  7.  * Configuration
  8.  *
  9.  * @author Marc Weistroff <marc.weistroff@sensio.com>
  10.  */
  11. class Configuration implements ConfigurationInterface
  12. {
  13.     /**
  14.      * @var string
  15.      */
  16.     protected $name;
  17.     /**
  18.      * Configuration constructor.
  19.      *
  20.      * @param   string  $name
  21.      */
  22.     public function __construct($name)
  23.     {
  24.         $this->name $name;
  25.     }
  26.     public function getConfigTreeBuilder()
  27.     {
  28.         $tree = new TreeBuilder();
  29.         $rootNode $tree->root($this->name);
  30.         $rootNode
  31.             ->children()
  32.                 ->booleanNode('debug')->defaultValue('%kernel.debug%')->end()
  33.                 ->booleanNode('enable_collector')->defaultValue(false)->end()
  34.                 ->booleanNode('sandbox')->defaultValue(false)->end()
  35.             ->end()
  36.         ;
  37.         $this->addConnections($rootNode);
  38.         $this->addBindings($rootNode);
  39.         $this->addProducers($rootNode);
  40.         $this->addConsumers($rootNode);
  41.         $this->addMultipleConsumers($rootNode);
  42.         $this->addDynamicConsumers($rootNode);
  43.         $this->addBatchConsumers($rootNode);
  44.         $this->addAnonConsumers($rootNode);
  45.         $this->addRpcClients($rootNode);
  46.         $this->addRpcServers($rootNode);
  47.         return $tree;
  48.     }
  49.     protected function addConnections(ArrayNodeDefinition $node)
  50.     {
  51.         $node
  52.             ->fixXmlConfig('connection')
  53.             ->children()
  54.                 ->arrayNode('connections')
  55.                     ->useAttributeAsKey('key')
  56.                     ->canBeUnset()
  57.                     ->prototype('array')
  58.                         ->children()
  59.                             ->scalarNode('url')->defaultValue('')->end()
  60.                             ->scalarNode('host')->defaultValue('localhost')->end()
  61.                             ->scalarNode('port')->defaultValue(5672)->end()
  62.                             ->scalarNode('user')->defaultValue('guest')->end()
  63.                             ->scalarNode('password')->defaultValue('guest')->end()
  64.                             ->scalarNode('vhost')->defaultValue('/')->end()
  65.                             ->booleanNode('lazy')->defaultFalse()->end()
  66.                             ->scalarNode('connection_timeout')->defaultValue(3)->end()
  67.                             ->scalarNode('read_write_timeout')->defaultValue(3)->end()
  68.                             ->booleanNode('use_socket')->defaultValue(false)->end()
  69.                             ->arrayNode('ssl_context')
  70.                                 ->useAttributeAsKey('key')
  71.                                 ->canBeUnset()
  72.                                 ->prototype('variable')->end()
  73.                             ->end()
  74.                             ->booleanNode('keepalive')->defaultFalse()->info('requires php-amqplib v2.4.1+ and PHP5.4+')->end()
  75.                             ->scalarNode('heartbeat')->defaultValue(0)->info('requires php-amqplib v2.4.1+')->end()
  76.                             ->scalarNode('connection_parameters_provider')->end()
  77.                         ->end()
  78.                     ->end()
  79.                 ->end()
  80.             ->end()
  81.         ;
  82.     }
  83.     protected function addProducers(ArrayNodeDefinition $node)
  84.     {
  85.         $node
  86.             ->fixXmlConfig('producer')
  87.             ->children()
  88.                 ->arrayNode('producers')
  89.                     ->canBeUnset()
  90.                     ->useAttributeAsKey('key')
  91.                     ->prototype('array')
  92.                         ->append($this->getExchangeConfiguration())
  93.                         ->append($this->getQueueConfiguration())
  94.                         ->children()
  95.                             ->scalarNode('connection')->defaultValue('default')->end()
  96.                             ->scalarNode('auto_setup_fabric')->defaultTrue()->end()
  97.                             ->scalarNode('class')->defaultValue('%old_sound_rabbit_mq.producer.class%')->end()
  98.                             ->scalarNode('enable_logger')->defaultFalse()->end()
  99.                             ->scalarNode('service_alias')->defaultValue(null)->end()
  100.                         ->end()
  101.                     ->end()
  102.                 ->end()
  103.             ->end()
  104.         ;
  105.     }
  106.     protected function addBindings(ArrayNodeDefinition $node)
  107.     {
  108.         $node
  109.             ->fixXmlConfig('binding')
  110.             ->children()
  111.                 ->arrayNode('bindings')
  112.                     ->canBeUnset()
  113.                     ->prototype('array')
  114.                         ->children()
  115.                             ->scalarNode('connection')->defaultValue('default')->end()
  116.                             ->scalarNode('exchange')->defaultNull()->end()
  117.                             ->scalarNode('destination')->defaultNull()->end()
  118.                             ->scalarNode('routing_key')->defaultNull()->end()
  119.                             ->booleanNode('nowait')->defaultFalse()->end()
  120.                             ->booleanNode('destination_is_exchange')->defaultFalse()->end()
  121.                             ->variableNode('arguments')->defaultNull()->end()
  122.                             ->scalarNode('class')->defaultValue('%old_sound_rabbit_mq.binding.class%')->end()
  123.                         ->end()
  124.                     ->end()
  125.                 ->end()
  126.             ->end()
  127.         ;
  128.     }
  129.     protected function addConsumers(ArrayNodeDefinition $node)
  130.     {
  131.         $node
  132.             ->fixXmlConfig('consumer')
  133.             ->children()
  134.                 ->arrayNode('consumers')
  135.                     ->canBeUnset()
  136.                     ->useAttributeAsKey('key')
  137.                     ->prototype('array')
  138.                         ->append($this->getExchangeConfiguration())
  139.                         ->append($this->getQueueConfiguration())
  140.                         ->children()
  141.                             ->scalarNode('connection')->defaultValue('default')->end()
  142.                             ->scalarNode('callback')->isRequired()->end()
  143.                             ->scalarNode('idle_timeout')->end()
  144.                             ->scalarNode('idle_timeout_exit_code')->end()
  145.                             ->arrayNode('graceful_max_execution')
  146.                                 ->canBeUnset()
  147.                                 ->children()
  148.                                     ->integerNode('timeout')->end()
  149.                                     ->integerNode('exit_code')->defaultValue(0)->end()
  150.                                 ->end()
  151.                             ->end()
  152.                             ->scalarNode('auto_setup_fabric')->defaultTrue()->end()
  153.                             ->arrayNode('qos_options')
  154.                                 ->canBeUnset()
  155.                                 ->children()
  156.                                     ->scalarNode('prefetch_size')->defaultValue(0)->end()
  157.                                     ->scalarNode('prefetch_count')->defaultValue(0)->end()
  158.                                     ->booleanNode('global')->defaultFalse()->end()
  159.                                 ->end()
  160.                             ->end()
  161.                             ->scalarNode('enable_logger')->defaultFalse()->end()
  162.                         ->end()
  163.                     ->end()
  164.                 ->end()
  165.             ->end()
  166.         ;
  167.     }
  168.     protected function addMultipleConsumers(ArrayNodeDefinition $node)
  169.     {
  170.         $node
  171.             ->fixXmlConfig('multiple_consumer')
  172.             ->children()
  173.                 ->arrayNode('multiple_consumers')
  174.                 ->canBeUnset()
  175.                 ->useAttributeAsKey('key')
  176.                 ->prototype('array')
  177.                     ->append($this->getExchangeConfiguration())
  178.                     ->children()
  179.                         ->scalarNode('connection')->defaultValue('default')->end()
  180.                         ->scalarNode('idle_timeout')->end()
  181.                         ->scalarNode('idle_timeout_exit_code')->end()
  182.                         ->scalarNode('auto_setup_fabric')->defaultTrue()->end()
  183.                         ->arrayNode('graceful_max_execution')
  184.                             ->canBeUnset()
  185.                             ->children()
  186.                                 ->integerNode('timeout')->end()
  187.                                 ->integerNode('exit_code')->defaultValue(0)->end()
  188.                             ->end()
  189.                         ->end()
  190.                         ->append($this->getMultipleQueuesConfiguration())
  191.                         ->arrayNode('qos_options')
  192.                             ->canBeUnset()
  193.                             ->children()
  194.                                 ->scalarNode('prefetch_size')->defaultValue(0)->end()
  195.                                 ->scalarNode('prefetch_count')->defaultValue(0)->end()
  196.                                 ->booleanNode('global')->defaultFalse()->end()
  197.                             ->end()
  198.                         ->end()
  199.                         ->scalarNode('queues_provider')->defaultNull()->end()
  200.                         ->scalarNode('enable_logger')->defaultFalse()->end()
  201.                     ->end()
  202.                 ->end()
  203.             ->end()
  204.         ;
  205.     }
  206.     
  207.     protected function addDynamicConsumers(ArrayNodeDefinition $node)
  208.     {
  209.         $node
  210.             ->fixXmlConfig('dynamic_consumer')
  211.             ->children()
  212.                 ->arrayNode('dynamic_consumers')
  213.                     ->canBeUnset()
  214.                     ->useAttributeAsKey('key')
  215.                     ->prototype('array')
  216.                         ->append($this->getExchangeConfiguration())
  217.                         ->children()
  218.                             ->scalarNode('connection')->defaultValue('default')->end()
  219.                             ->scalarNode('callback')->isRequired()->end()
  220.                             ->scalarNode('idle_timeout')->end()
  221.                             ->scalarNode('idle_timeout_exit_code')->end()
  222.                             ->scalarNode('auto_setup_fabric')->defaultTrue()->end()
  223.                             ->arrayNode('qos_options')
  224.                                 ->canBeUnset()
  225.                                 ->children()
  226.                                     ->scalarNode('prefetch_size')->defaultValue(0)->end()
  227.                                     ->scalarNode('prefetch_count')->defaultValue(0)->end()
  228.                                     ->booleanNode('global')->defaultFalse()->end()
  229.                                 ->end()
  230.                             ->end()
  231.                             ->scalarNode('queue_options_provider')->isRequired()->end()
  232.                             ->scalarNode('enable_logger')->defaultFalse()->end()
  233.                         ->end()
  234.                     ->end()
  235.                 ->end()
  236.             ->end()
  237.         ;
  238.     }
  239.     /**
  240.      * @param   ArrayNodeDefinition     $node
  241.      *
  242.      * @return  void
  243.      */
  244.     protected function addBatchConsumers(ArrayNodeDefinition $node)
  245.     {
  246.         $node
  247.             ->children()
  248.                 ->arrayNode('batch_consumers')
  249.                     ->canBeUnset()
  250.                     ->useAttributeAsKey('key')
  251.                     ->prototype('array')
  252.                         ->append($this->getExchangeConfiguration())
  253.                         ->append($this->getQueueConfiguration())
  254.                         ->children()
  255.                             ->scalarNode('connection')->defaultValue('default')->end()
  256.                             ->scalarNode('callback')->isRequired()->end()
  257.                             ->scalarNode('idle_timeout')->end()
  258.                             ->scalarNode('timeout_wait')->defaultValue(3)->end()
  259.                             ->scalarNode('idle_timeout_exit_code')->end()
  260.                             ->scalarNode('keep_alive')->defaultFalse()->end()
  261.                             ->arrayNode('graceful_max_execution')
  262.                                 ->canBeUnset()
  263.                                 ->children()
  264.                                     ->integerNode('timeout')->end()
  265.                                 ->end()
  266.                             ->end()
  267.                             ->scalarNode('auto_setup_fabric')->defaultTrue()->end()
  268.                             ->arrayNode('qos_options')
  269.                                 ->children()
  270.                                     ->scalarNode('prefetch_size')->defaultValue(0)->end()
  271.                                     ->scalarNode('prefetch_count')->defaultValue(2)->end()
  272.                                     ->booleanNode('global')->defaultFalse()->end()
  273.                                 ->end()
  274.                             ->end()
  275.                             ->scalarNode('enable_logger')->defaultFalse()->end()
  276.                         ->end()
  277.                     ->end()
  278.                 ->end()
  279.             ->end()
  280.         ;
  281.     }
  282.     protected function addAnonConsumers(ArrayNodeDefinition $node)
  283.     {
  284.         $node
  285.             ->fixXmlConfig('anon_consumer')
  286.             ->children()
  287.                 ->arrayNode('anon_consumers')
  288.                     ->canBeUnset()
  289.                     ->useAttributeAsKey('key')
  290.                     ->prototype('array')
  291.                         ->append($this->getExchangeConfiguration())
  292.                         ->children()
  293.                             ->scalarNode('connection')->defaultValue('default')->end()
  294.                             ->scalarNode('callback')->isRequired()->end()
  295.                         ->end()
  296.                     ->end()
  297.                 ->end()
  298.             ->end()
  299.         ;
  300.     }
  301.     protected function addRpcClients(ArrayNodeDefinition $node)
  302.     {
  303.         $node
  304.             ->fixXmlConfig('rpc_client')
  305.             ->children()
  306.                 ->arrayNode('rpc_clients')
  307.                     ->canBeUnset()
  308.                     ->useAttributeAsKey('key')
  309.                     ->prototype('array')
  310.                         ->children()
  311.                             ->scalarNode('connection')->defaultValue('default')->end()
  312.                             ->booleanNode('expect_serialized_response')->defaultTrue()->end()
  313.                             ->scalarNode('unserializer')->defaultValue('unserialize')->end()
  314.                             ->booleanNode('lazy')->defaultFalse()->end()
  315.                             ->booleanNode('direct_reply_to')->defaultFalse()->end()
  316.                         ->end()
  317.                     ->end()
  318.                 ->end()
  319.             ->end()
  320.         ;
  321.     }
  322.     protected function addRpcServers(ArrayNodeDefinition $node)
  323.     {
  324.         $node
  325.             ->fixXmlConfig('rpc_server')
  326.             ->children()
  327.                 ->arrayNode('rpc_servers')
  328.                     ->canBeUnset()
  329.                     ->useAttributeAsKey('key')
  330.                     ->prototype('array')
  331.                         ->append($this->getExchangeConfiguration())
  332.                         ->append($this->getQueueConfiguration())
  333.                         ->children()
  334.                             ->scalarNode('connection')->defaultValue('default')->end()
  335.                             ->scalarNode('callback')->isRequired()->end()
  336.                             ->arrayNode('qos_options')
  337.                                 ->canBeUnset()
  338.                                 ->children()
  339.                                     ->scalarNode('prefetch_size')->defaultValue(0)->end()
  340.                                     ->scalarNode('prefetch_count')->defaultValue(0)->end()
  341.                                     ->booleanNode('global')->defaultFalse()->end()
  342.                                 ->end()
  343.                             ->end()
  344.                             ->scalarNode('serializer')->defaultValue('serialize')->end()
  345.                             ->scalarNode('enable_logger')->defaultFalse()->end()
  346.                         ->end()
  347.                     ->end()
  348.                 ->end()
  349.             ->end()
  350.         ;
  351.     }
  352.     protected function getExchangeConfiguration()
  353.     {
  354.         $node = new ArrayNodeDefinition('exchange_options');
  355.         return $node
  356.             ->children()
  357.                 ->scalarNode('name')->isRequired()->end()
  358.                 ->scalarNode('type')->isRequired()->end()
  359.                 ->booleanNode('passive')->defaultValue(false)->end()
  360.                 ->booleanNode('durable')->defaultValue(true)->end()
  361.                 ->booleanNode('auto_delete')->defaultValue(false)->end()
  362.                 ->booleanNode('internal')->defaultValue(false)->end()
  363.                 ->booleanNode('nowait')->defaultValue(false)->end()
  364.                 ->booleanNode('declare')->defaultValue(true)->end()
  365.                 ->variableNode('arguments')->defaultNull()->end()
  366.                 ->scalarNode('ticket')->defaultNull()->end()
  367.             ->end()
  368.         ;
  369.     }
  370.     protected function getQueueConfiguration()
  371.     {
  372.         $node = new ArrayNodeDefinition('queue_options');
  373.         $this->addQueueNodeConfiguration($node);
  374.         return $node;
  375.     }
  376.     protected function getMultipleQueuesConfiguration()
  377.     {
  378.         $node = new ArrayNodeDefinition('queues');
  379.         $prototypeNode $node->prototype('array');
  380.         $this->addQueueNodeConfiguration($prototypeNode);
  381.         $prototypeNode->children()
  382.             ->scalarNode('callback')->isRequired()->end()
  383.         ->end();
  384.         $prototypeNode->end();
  385.         return $node;
  386.     }
  387.     protected function addQueueNodeConfiguration(ArrayNodeDefinition $node)
  388.     {
  389.         $node
  390.             ->fixXmlConfig('routing_key')
  391.             ->children()
  392.                 ->scalarNode('name')->end()
  393.                 ->booleanNode('passive')->defaultFalse()->end()
  394.                 ->booleanNode('durable')->defaultTrue()->end()
  395.                 ->booleanNode('exclusive')->defaultFalse()->end()
  396.                 ->booleanNode('auto_delete')->defaultFalse()->end()
  397.                 ->booleanNode('nowait')->defaultFalse()->end()
  398.                 ->booleanNode('declare')->defaultTrue()->end()
  399.                 ->variableNode('arguments')->defaultNull()->end()
  400.                 ->scalarNode('ticket')->defaultNull()->end()
  401.                 ->arrayNode('routing_keys')
  402.                     ->prototype('scalar')->end()
  403.                     ->defaultValue(array())
  404.                 ->end()
  405.             ->end()
  406.         ;
  407.     }
  408. }