/** * {@inheritdoc} */ public function release(int $delay = 0) { $this->delete(); $body = $this->message->body; $body = json_decode($body, true); $attempts = $this->attempts(); $job = unserialize($body['data']['command']); // write attempts to job $job->attempts = $attempts + 1; $data = $body['data']; if ($delay > 0) { $this->connection->later($delay, $job, $data, $this->getQueue()); } else { $this->connection->push($job, $data, $this->getQueue()); } }
public function testDelayedPushProperlyPushesJobOnToRabbitMQ() { $encrypter = $this->mock(EncrypterContract::class); $encrypter->shouldReceive('encrypt'); $channel = $this->mock(AMQPChannel::class); $channel->shouldReceive('exchange_declare')->twice()->with('messages.exchange', 'direct', false, true, false); $channel->shouldReceive('queue_declare')->once()->with('cnc', false, true, false, false); $channel->shouldReceive('queue_declare')->once(); $channel->shouldReceive('queue_bind')->once()->with('cnc', 'messages.exchange', 'cnc'); $channel->shouldReceive('queue_bind')->once()->with('cnc_deferred_5', 'messages.exchange', 'cnc_deferred_5'); $channel->shouldReceive('basic_publish')->once(); $connection = $this->mock(AMQPStreamConnection::class); $connection->shouldReceive('channel')->once()->andReturn($channel); $queue = new RabbitMQQueue($connection, ['queue' => 'cnc', 'queue_params' => ['passive' => false, 'durable' => true, 'exclusive' => false, 'auto_delete' => false], 'exchange_params' => ['name' => 'messages.exchange', 'type' => 'direct', 'passive' => false, 'durable' => true, 'auto_delete' => false], 'exchange_declare' => true, 'queue_declare_bind' => 'cnc']); $queue->setEncrypter($encrypter); $queue->later(5, 'foo', ['someData']); }