<?php require_once __DIR__ . '/../vendor/autoload.php'; use ServiceBus\Broadcaster; use ServiceBus\Discovery\ArrayDiscovery; use ServiceBus\Endpoint; use ServiceBus\Identity; use ServiceBus\ServiceBus; use ServiceBus\Message\Request; use ServiceBus\Protocol\AMQP; $env = function ($key, $default = null) { return isset($_SERVER[$key]) ? $_SERVER[$key] : $default; }; $amqpUrl = $env('AMQP_URL', 'amqp://*****:*****@localhost/%2f'); $connection = \ButterAMQP\ConnectionBuilder::make()->create($amqpUrl); $driver = new AMQP\Driver($connection, 'outbox'); // Use AMQP driver for category_repository endpoint to send message over AMQP $bus = new ServiceBus(new ArrayDiscovery([new Endpoint(new Identity('category_repository', [$amqpUrl . '?exchange=category-repository']), $driver)]), new Broadcaster\NullBroadcaster()); // Publish a message asynchronously $bus->discover('category_repository')->publish(new Request('category_repository.updated', '1.0', ['category' => ['name' => 'Fruits', 'position' => 10]]));
/** * Discovery for previously defined service should return defined service. */ public function testDiscoveryOfDefinedService() { $endpointA = $this->serviceBus->define(new Identity('calc')); $endpointB = $this->serviceBus->discover('calc'); $this->assertSame($endpointA, $endpointB); }
<?php use ButterAMQP\ConnectionBuilder; use ServiceBus\Discovery\LookupDiscovery; use ServiceBus\Discovery\Registry\InMemoryRegistry; use ServiceBus\Discovery\Registry\LookupRegistry; use ServiceBus\Discovery\RegistryDiscovery; use ServiceBus\Driver\ArrayDriver; use ServiceBus\DriverFactory; use ServiceBus\Endpoint; use ServiceBus\Identity; use ServiceBus\Message\Request; use ServiceBus\Protocol\JSONRPC; use ServiceBus\Protocol\AMQP; use ServiceBus\ServiceBus; $amqp = ConnectionBuilder::make()->create('amqp://localhost:5672/%2f'); $drivers = new ArrayDriver([new JSONRPC\Driver(), new AMQP\Driver($amqp)]); // This endpoint will be used to fetch discovery information. $discovery = new Endpoint(new Identity('discovery', ['jsonrpc://discovery', 'amqp://discovery?exchange=inbox.discovery']), $drivers); // Lookup registry will try to fetch service identity from in-memory registry and if its not there // will use discovery service. $registry = new LookupRegistry($discovery, new InMemoryRegistry()); $bus = new ServiceBus(new RegistryDiscovery($registry, $drivers), new AMQP\Broadcaster($amqp, 'outbox')); $pong = $bus->discover('ping-pong')->call(new Request('ping', ['payload' => $payload = uniqid('ping')]))->resolve()->getValue(); echo $pong['payload'] == $payload ? 'Service ping-pong working fine!' : 'Reply payload does not match'; echo PHP_EOL;
<?php require_once __DIR__ . '/../vendor/autoload.php'; use ServiceBus\Broadcaster\NullBroadcaster; use ServiceBus\Discovery\ArrayDiscovery; use ServiceBus\Endpoint; use ServiceBus\Identity; use ServiceBus\ServiceBus; use ServiceBus\Message\Request; use ServiceBus\Protocol\JSONRPC; $env = function ($key, $default = null) { return isset($_SERVER[$key]) ? $_SERVER[$key] : $default; }; $driver = new JSONRPC\Driver(); $bus = new ServiceBus(new ArrayDiscovery([new Endpoint(new Identity('calc', [$env('CALC_URL', 'http://localhost:8000/json-rpc')]), $driver)]), new NullBroadcaster()); // Make a call $promise = $bus->discover('calc')->call(new Request('div', '1', ['a' => 10, 'b' => 5])); // Wait for response $response = $promise->resolve(); // Should be 2 var_export($response->getValue()); echo PHP_EOL;
<?php require_once __DIR__ . '/../vendor/autoload.php'; use ServiceBus\Broadcaster; use ServiceBus\Discovery\ArrayDiscovery; use ServiceBus\Endpoint; use ServiceBus\Identity; use ServiceBus\ServiceBus; use ServiceBus\Message\Request; use ServiceBus\Protocol\AMQP; $env = function ($key, $default = null) { return isset($_SERVER[$key]) ? $_SERVER[$key] : $default; }; $amqpUrl = $env('AMQP_URL', 'amqp://*****:*****@localhost/%2f'); $connection = \ButterAMQP\ConnectionBuilder::make()->create($amqpUrl); // Use AMQP driver for category_repository endpoint to send message over AMQP $driver = new AMQP\Driver($connection, 'inbox.category_repository'); $bus = new ServiceBus(new ArrayDiscovery([new Endpoint(new Identity('category_repository', [$amqpUrl . '?exchange=category-repository']), $driver)]), new Broadcaster\NullBroadcaster()); // Make a call $promise = $bus->discover('category_repository')->call(new Request('category_repository.find', '1.0', ['query' => ['offset' => 10, 'size' => 10]])); // Wait for response $response = $promise->resolve();