• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

squigg / azure-queue-laravel / 16522163534

25 Jul 2025 12:38PM UTC coverage: 100.0%. Remained the same
16522163534

push

github

web-flow
Support Laravel 12.x (#34)

* Add 12.x to README

* Update tests to avoid phpunit deprecations and warnings

71 of 71 relevant lines covered (100.0%)

25.77 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

100.0
/src/AzureQueue.php
1
<?php
2

3
namespace Squigg\AzureQueueLaravel;
4

5
use DateTime;
6
use Illuminate\Contracts\Queue\Queue as QueueInterface;
7
use Illuminate\Queue\Queue;
8
use MicrosoftAzure\Storage\Queue\Internal\IQueue;
9
use MicrosoftAzure\Storage\Queue\Models\CreateMessageOptions;
10
use MicrosoftAzure\Storage\Queue\Models\ListMessagesOptions;
11

12
class AzureQueue extends Queue implements QueueInterface
13
{
14

15
    /**
16
     * The Azure IQueue instance.
17
     */
18
    protected IQueue $azure;
19

20
    /**
21
     * The name of the default queue.
22
     */
23
    protected string $default;
24

25
    /**
26
     * The value in seconds that the queue item is invisible to other requesters
27
     */
28
    protected int $visibilityTimeout;
29

30
    /**
31
     * Create a new Azure IQueue queue instance.
32
     *
33
     * @param IQueue $azure
34
     * @param string $default
35
     * @param int $visibilityTimeout
36
     */
37
    public function __construct(IQueue $azure, string $default, int $visibilityTimeout)
105✔
38
    {
39
        $this->azure = $azure;
105✔
40
        $this->default = $default;
105✔
41
        $this->visibilityTimeout = $visibilityTimeout ?: 5;
105✔
42
    }
43

44
    /**
45
     * Push a new job onto the queue.
46
     *
47
     * @param string $job
48
     * @param mixed $data
49
     * @param string $queue
50
     *
51
     * @return void
52
     */
53
    public function push($job, $data = '', $queue = null): void
5✔
54
    {
55
        $this->pushRaw($this->createPayload($job, $queue, $data), $queue);
5✔
56
    }
57

58
    /**
59
     * Push a raw payload onto the queue.
60
     *
61
     * @param  string $payload
62
     * @param  string $queue
63
     * @param  array $options
64
     *
65
     * @return void
66
     */
67
    public function pushRaw($payload, $queue = null, array $options = []): void
5✔
68
    {
69
        $this->azure->createMessage($this->getQueue($queue), $payload);
5✔
70
    }
71

72
    /**
73
     * Push a new job onto the queue after (n) seconds.
74
     *
75
     * @param  DateTime|int $delay
76
     * @param  string $job
77
     * @param  mixed $data
78
     * @param  string $queue
79
     *
80
     * @return void
81
     */
82
    public function later($delay, $job, $data = '', $queue = null): void
5✔
83
    {
84
        $payload = $this->createPayload($job, $queue, $data);
5✔
85

86
        $options = new CreateMessageOptions();
5✔
87
        $options->setVisibilityTimeoutInSeconds($this->secondsUntil($delay));
5✔
88

89
        $this->azure->createMessage($this->getQueue($queue), $payload, $options);
5✔
90
    }
91

92
    /**
93
     * Pop the next job off of the queue.
94
     *
95
     * @param string|null $queue
96
     *
97
     * @return AzureJob|null
98
     */
99
    public function pop($queue = null): AzureJob|null
25✔
100
    {
101
        $queue = $this->getQueue($queue);
25✔
102

103
        // As recommended in the API docs, first call listMessages to hide message from other code
104
        $listMessagesOptions = new ListMessagesOptions();
25✔
105
        $listMessagesOptions->setVisibilityTimeoutInSeconds($this->visibilityTimeout);
25✔
106
        $listMessagesOptions->setNumberOfMessages(1);
25✔
107

108
        $listMessages = $this->azure->listMessages($queue, $listMessagesOptions);
25✔
109
        $messages = $listMessages->getQueueMessages();
25✔
110

111
        if (count($messages) > 0) {
25✔
112
            return new AzureJob($this->container, $this->azure, $messages[0], $this->connectionName, $queue);
20✔
113
        }
114

115
        return null;
5✔
116
    }
117

118
    /**
119
     * Get the queue or return the default.
120
     *
121
     * @param string|null $queue
122
     *
123
     * @return string
124
     */
125
    public function getQueue(?string $queue): string
45✔
126
    {
127
        return $queue ?: $this->default;
45✔
128
    }
129

130
    /**
131
     * Get the visibility timeout for queue messages.
132
     *
133
     * @return int
134
     */
135
    public function getVisibilityTimeout(): int
10✔
136
    {
137
        return $this->visibilityTimeout;
10✔
138
    }
139

140
    /**
141
     * Get the underlying Azure IQueue instance.
142
     *
143
     * @return IQueue
144
     */
145
    public function getAzure(): IQueue
5✔
146
    {
147
        return $this->azure;
5✔
148
    }
149

150
    /**
151
     * Get the approximate size of the queue.
152
     *
153
     * @param  string $queue
154
     * @return int
155
     */
156
    public function size($queue = null): int
5✔
157
    {
158
        $queue = $this->getQueue($queue);
5✔
159

160
        $metaData = $this->azure->getQueueMetadata($queue);
5✔
161

162
        return $metaData->getApproximateMessageCount();
5✔
163
    }
164
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc