/** * @inheritdoc * @throws NotSupportedException */ public function subscribe($subscriber_id, $label = null, $categories = null, $exceptions = null) { if ($this->blocking) { if ($exceptions !== null) { throw new NotSupportedException('Redis queues does not support pattern exceptions in blocking (pubsub) mode.'); } foreach ($categories as $category) { if (($c = rtrim($category, '*')) !== $category) { $this->redis->psubscribe($category); } else { $this->redis->subscribe($category); } } return; } $now = new \DateTime('now', new \DateTimezone('UTC')); $subscription = new Subscription(); $subscription->setAttributes(['subscriber_id' => $subscriber_id, 'label' => $label, 'categories' => $categories, 'exceptions' => $exceptions !== null ? $exceptions : [], 'created_on' => $now->format('Y-m-d H:i:s')]); $this->redis->hset($this->id . self::SUBSCRIPTIONS_HASH, $subscriber_id, serialize($subscription)); }
/** * Creates an array of Subscription objects from DbSubscription objects. * @param DbSubscription|array $dbSubscriptions one or more DbSubscription objects * @return array of Subscription objects */ public static function createSubscriptions($dbSubscriptions) { if (!is_array($dbSubscriptions)) { $dbSubscriptions = [$dbSubscriptions]; } $result = []; foreach ($dbSubscriptions as $dbSubscription) { $attributes = $dbSubscription->getAttributes(); unset($attributes['id']); unset($attributes['queue_id']); unset($attributes['is_deleted']); $subscription = new components\Subscription(); $subscription->setAttributes($attributes); foreach ($dbSubscription->categories as $category) { if (!$category->is_exception) { $subscription->categories[] = $category->category; } else { $subscription->exceptions[] = $category->category; } } $result[] = $subscription; } return $result; }