<?php

include 'bootstrap.php';
$messaging = new SoftLayer\Messaging();
$messaging->authenticate(QUEUE_ACCOUNT, QUEUE_USERNAME, QUEUE_API_KEY);
// Much like creating a queue, all I need to provide for a topic is a name.
$topic = $messaging->topic('myFirstTopic')->create();
// To actually do something, topics need subscribers. I can add either
// HTTP and/or queue subscriptions.
// A queue must exist before creating a subscription which targets it.
$queue1 = $messaging->queue('myTargetQueue1')->create();
$queue2 = $messaging->queue('myTargetQueue2')->create();
// First I'll create an endpoint targeting each queue.
$queueEndpoint1 = SoftLayer\Messaging\Endpoint::endpointByType('queue');
$queueEndpoint1->setQueueName($queue1->getName());
$queueEndpoint2 = SoftLayer\Messaging\Endpoint::endpointByType('queue');
$queueEndpoint2->setQueueName($queue2->getName());
// Then I add them to the topic as individual subscriptions.
$topic->subscription()->setEndpointType('queue')->setEndpoint($queueEndpoint1)->create();
$topic->subscription()->setEndpointType('queue')->setEndpoint($queueEndpoint2)->create();
// Now the topic should tell me I have 2 subscribers, each targeting a
// different queue.
$subscriptions = $topic->subscriptions();
foreach ($subscriptions as $s) {
    echo $s->getId() . ' : ' . $s->getEndpointType() . ' : ' . $s->getEndpoint()->getQueueName() . PHP_EOL;
}
// Finally, I can push a message to the topic. That message will subsequently
// end up in both target queues.
$topic->message('Example Message 1')->create();
// The message needs a moment to be dispatched and visible.
sleep(10);