superbalist / php-pubsub-http
An HTTP adapter for the php-pubsub package
Installs: 100 376
Dependents: 5
Suggesters: 0
Security: 0
Stars: 1
Watchers: 36
Forks: 4
Open Issues: 0
Requires
- php: >=5.6.0
- guzzlehttp/guzzle: ^6.2
- superbalist/php-pubsub: ^2.0
Requires (Dev)
- mockery/mockery: ^0.9.5
- phpunit/phpunit: ^5.5
This package is auto-updated.
Last update: 2024-08-12 00:13:12 UTC
README
An HTTP adapter for the php-pubsub package.
This adapter assumes that you have a HTTP service which accepts an array of messages POSTed to a /messages/(channel) end-point.
A server-side implementation, js-pubsub-rest-proxy, is available as a plug and play Docker appliance.
Installation
composer require superbalist/php-pubsub-http
Usage
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . __DIR__ . '/../your-gcloud-key.json'); // create the underlying adapter which is going to be decorated $pubSubClient = new \Google\Cloud\PubSub\PubSubClient([ 'projectId' => 'your-project-id-here', ]); $subscribeAdapter = new \Superbalist\PubSub\GoogleCloud\GoogleCloudPubSubAdapter($pubSubClient); // now create our decorator // the decorator will proxy subscribe calls straight to the $subscribeAdapter // publish calls will be POSTed to the service uri $client = new \GuzzleHttp\Client(); $adapter = new \Superbalist\PubSub\HTTP\HTTPPubSubAdapter($client, 'https://127.0.0.1', $subscribeAdapter); // consume messages $adapter->subscribe('my_channel', function ($message) { var_dump($message); }); // publish messages $adapter->publish('my_channel', 'HELLO WORLD'); $adapter->publish('my_channel', ['hello' => 'world']); // publish multiple messages $messages = [ 'Hello World!', ['hello' => 'world'], ]; $adapter->publishBatch('my_channel', $messages);
Examples
The library comes with examples for the adapter and a Dockerfile for running the example scripts.
Run make up
.
You will start at a bash
prompt in the /opt/php-pubsub
directory.
If you need another shell to publish a message to a blocking consumer, you can run docker-compose run php-pubsub-http /bin/bash
To run the examples:
$ ./run_consumer.sh $ ./run_publisher.sh (in a separate shell)