/** * {@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 testPushProperlyPushesJobOnToRabbitMQ() { $encrypter = $this->mock(EncrypterContract::class); $encrypter->shouldReceive('encrypt'); $channel = $this->mock(AMQPChannel::class); $channel->shouldReceive('exchange_declare')->times(4)->with('messages.exchange', 'direct', false, true, false); $channel->shouldReceive('queue_declare')->twice()->with('cnc', false, true, false, false); $channel->shouldReceive('queue_bind')->twice()->with('cnc', 'messages.exchange', 'cnc'); $channel->shouldReceive('basic_publish')->twice(); $channel->shouldReceive('queue_declare')->twice()->with('stack', false, true, false, false); $channel->shouldReceive('queue_bind')->twice()->with('stack', 'messages.exchange', 'stack'); $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->push('foo', ['someData']); $queue->push('foo', ['someData'], 'stack'); }