AWS Provider¶
The AWS Provider uses SQS & SNS to create a Push Queue model. SNS is optional with
this provider and its possible to use just SQS by utilizing the provided Console
Command (uecode:qpush:receive
) to poll the queue.
Configuration¶
This provider relies on the AWS SDK PHP library, which
needs to be required in your composer.json
file.
This bundle will support both v2 and v3 of the AWS SDK.
{
require: {
"aws/aws-sdk-php": : "2.*" #OR "3.*"
}
}
From there, the rest of the configuration is simple. You need to provide your credentials in your configuration.
#app/config.yml
uecode_qpush:
providers:
my_provider:
driver: aws
key: <aws key>
secret: <aws secret>
region: us-east-1
queues:
my_queue_name:
provider: my_provider
options:
push_notifications: true
subscribers:
- { endpoint: http://example.com/qpush, protocol: http }
You may exclude the aws key and secret if you are using IAM role in EC2.
Using SNS¶
If you set push_notifications
to true
in your queue config, this provider
will automatically create the SNS Topic, subscribe your SQS queue to it, as well
as loop over your list of subscribers
, adding them to your Topic.
This provider automatically handles Subscription Confirmations sent from SNS, as long as the HTTP endpoint you’ve listed is externally accessible and has the QPush Bundle properly installed and configured.
Overriding Queue Options¶
It’s possible to override the default queue options that are set in your config file when sending or receiving messages.
Publishing
The publish()
method takes an array as a second argument. For the AWS Provider
you are able to change the options listed below per publish.
If you disable push_notifications
for a message, it will skip using SNS and
only write the message to SQS. You will need to manually poll the SQS queue to
fetch those messages.
Option | Description | Default Value |
---|---|---|
push_notifications |
Whether or not to POST notifications to subscribers of a Queue | false |
message_delay |
Time in seconds before a published Message is available to be read in a Queue | 0 |
$message = ['foo' => 'bar'];
// Optional config to override default options
$options = [
'push_notifications' => 0,
'message_delay' => 1
];
$this->get('uecode_qpush.my_queue_name')->publish($message, $options);
Receiving
The receive()
method takes an array as a second argument. For the AWS Provider
you are able to change the options listed below per attempt to receive messages.
Option | Description | Default Value |
---|---|---|
messages_to_receive |
Maximum amount of messages that can be received when polling the queue | 1 |
receive_wait_time |
If supported, time in seconds to leave the polling request open - for long polling | 3 |
// Optional config to override default options
$options = [
'messages_to_receive' => 3,
'receive_wait_time' => 10
];
$messages = $this->get('uecode_qpush.my_queue_name')->receive($options);
foreach ($messages as $message) {
echo $message->getBody();
}