Explorar o código

se agrego libreria rabbitmq

Guillermo Espinoza %!s(int64=8) %!d(string=hai) anos
pai
achega
4d08b3dc8f

+ 21 - 1
EventListener/DoctrineEventSubscriber.php

@@ -6,9 +6,24 @@ use Doctrine\Common\EventSubscriber;
 use Doctrine\ORM\Event\LifecycleEventArgs;
 use WorkflowBundle\Utils\DoctrineEvents;
 use WorkflowBundle\Utils\WorkFlowEntityClasses;
+use OldSound\RabbitMqBundle\RabbitMq\Producer;
 
 class DoctrineEventSubscriber implements EventSubscriber
 {
+    
+    /**
+     * @var Producer
+     */
+    private $producer;
+    
+    
+    /**
+     * @param Producer $producer
+     */    
+    public function __construct(Producer $producer)
+    {
+        $this->producer = $producer;
+    }
 
     /**
      * @return array
@@ -83,7 +98,12 @@ class DoctrineEventSubscriber implements EventSubscriber
             foreach ($doctrine2WorkFlowActions as $doctrine2WorkFlowAction) {
                 $actions = $doctrine2WorkFlowAction->getActions();
                 foreach ($actions as $action) {
-//                     $action->execute($entity); // ejecutar accion, template, etc
+                    $msg = array(
+                        'msg' => 'bash script',
+                        'action' => $action,
+                        'entity' => $entity,
+                    );
+                    $this->producer->publish(serialize($msg));
                 }
             }
         }

+ 34 - 0
Resources/config/rabbit_mq/config.yml

@@ -0,0 +1,34 @@
+old_sound_rabbit_mq:
+    connections:
+        default:
+            host: %rabbit_mq.host%
+            port: %rabbit_mq.port%
+            user: %rabbit_mq.user%
+            password: %rabbit_mq.password%
+            vhost: %rabbit_mq.vhost%
+            lazy: false
+            connection_timeout: 3
+            read_write_timeout: 3
+
+            # requires php-amqplib v2.4.1+ and PHP5.4+
+            keepalive: false
+
+            # requires php-amqplib v2.4.1+
+            heartbeat: 0
+
+            #requires php_sockets.dll
+#            use_socket: true # default false
+            
+    producers:
+        flowdat_tasklogger:
+            connection:       default
+            exchange_options: {name: 'send', type: direct}
+            service_alias:    fd_tasklogger_service # no alias by default
+    consumers:
+        flowdat_tasklogger:
+            connection:       default
+            exchange_options: {name: 'send', type: direct}
+            queue_options:    {name: 'send'}
+            callback:         flowdat_tasklogger_service # sf service id
+            idle_timeout:           60
+            idle_timeout_exit_code: 0

+ 6 - 0
Resources/config/rabbit_mq/services.yml

@@ -0,0 +1,6 @@
+parameters:
+    tasklogger_service.class: WorkflowBundle\Services\TaskLoggerService
+
+services:
+    flowdat_tasklogger_service:
+        class: '%tasklogger_service.class%'

+ 5 - 0
Resources/config/services.yml

@@ -1,3 +1,7 @@
+imports:
+    - { resource: rabbit_mq/config.yml }
+    - { resource: rabbit_mq/services.yml }
+    
 services:
     workflow.admin.workflow:
         class: WorkflowBundle\Admin\WorkflowAdmin
@@ -22,6 +26,7 @@ services:
             - [setTranslationDomain, [WorkflowBundle]]
     workflow.doctrine_event.subscriber:
         class: WorkflowBundle\EventListener\DoctrineEventSubscriber
+        arguments: ['@old_sound_rabbit_mq.flowdat_tasklogger_producer']
         tags:
             - { name: doctrine.event_subscriber, connection: default }
     workflow.event.subscriber:

+ 23 - 0
Services/TaskLoggerService.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace WorkflowBundle\Services;
+
+use OldSound\RabbitMqBundle\RabbitMq\ConsumerInterface;
+use PhpAmqpLib\Message\AMQPMessage;
+
+class TaskLoggerService implements ConsumerInterface
+{
+
+    /**
+     * @param AMQPMessage $msg
+     */
+    public function execute(AMQPMessage $msg)
+    {
+        //$msg will be an instance of `PhpAmqpLib\Message\AMQPMessage` with the $msg->body being the data sent over RabbitMQ.
+
+        $data = $msg->body;
+        
+        return true;
+    }
+
+}

+ 3 - 0
composer.json

@@ -2,6 +2,9 @@
     "name": "ik/workflow-bundle",
     "description": "Flowdat 3 Workflow Bundle",
     "keywords": ["workflow", "bundle"],
+    "require": {
+        "php-amqplib/rabbitmq-bundle": "^1.12"
+    },
     "autoload": {
         "psr-4": { "WorkflowBundle\\": "" }
     },