/** * @param \Parsley\Plugins\SegmentInterface $segment * @param Payload $payload */ public function onSend($segment, $payload) { $props = $payload->getProperties(); /** @var \Parsley\Application $application */ $application = $this->container['parsley.application']; // TODO: dirty hack, get rid of it if (empty($props->getMessageId()) && $props->getMessageId() != 0) { // TODO: make id maker be accessible via container (or plugin?) // http://php.net/manual/en/function.uniqid.php#94959 $uuid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xfff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)); $props->setMessageId($uuid); } $props->setAppId($application->getName()); $props->setType('payload'); $props->setContentType($this->container['config']->get('parsley.payload.content_type', 'application/json')); // if (!$props->getAppId()) { // $props->setAppId($segment->getName()); // } // // if (!$props->getType()) { // $props->setType('payload'); // } // // if (!$props->getContentType()) { // $props->setContentType($this->container['config']->get('parsley.payload.content_type', 'application/json')); // } }
public function send(Payload $payload) { $this->fireSegmentEvent('send', [$payload]); /** @var \AMQPy\Publisher $publisher */ $publisher = $this->container['parsley.brokers.rabbitmq.publisher']; /** @var \Parsley\Helpers\PayloadBuilder $payload_builder */ $payload_builder = $this->container['parsley.payload_builder']; $props = $payload->getProperties(); $priority = $props->getPriority(); if (null === $priority) { $priority = $this->container['config']->get('parsley.priority', 'default'); } else { /** @var \Illuminate\Config\Repository $config */ $config = $this->container['config']; $priorities_map = $config->get('parsley.priorities'); $priority = array_get($priorities_map, $priority, 'default'); } $routing_key = $priority . '.' . $payload->getName(); if (!is_numeric($priority)) { $props->setPriority(null); } $publisher->publish($payload_builder->toArray($payload), $routing_key, $payload->getProperties()); $this->fireSegmentEvent('sent', [$payload, $priority, $routing_key]); }