2017 © Pedro PelĂĄez
 

library consul-php-sdk

SDK to talk with consul.io API

image

sensiolabs/consul-php-sdk

SDK to talk with consul.io API

  • Friday, September 15, 2017
  • by fabpot
  • Repository
  • 14 Watchers
  • 195 Stars
  • 249,413 Installations
  • PHP
  • 11 Dependents
  • 1 Suggesters
  • 42 Forks
  • 11 Open issues
  • 6 Versions
  • 12 % Grown

The README.md

Consul PHP SDK

Consul PHP SDK is a thin wrapper around the Consul HTTP API., (*1)

Compatibility

See previous version of README.md to find some version compatible with older version of symfony/http-client or guzzle, (*2)

Installation

This library can be installed with composer:, (*3)

composer require friendsofphp/consul-php-sdk

Supported services

  • agent
  • catalog
  • health
  • kv
  • session
  • txn

Usage

Instantiate a services, and start using it:, (*4)


$kv = new Consul\Services\KV(); $kv->put('test/foo/bar', 'bazinga'); $kv->get('test/foo/bar', ['raw' => true]); $kv->delete('test/foo/bar');

A service exposes few methods mapped from the consul API:, (*5)

All services methods follow the same convention:, (*6)

$response = $service->method($mandatoryArgument, $someOptions);
  • All API mandatory arguments are placed as first;
  • All API optional arguments are directly mapped from $someOptions;
  • All methods return a Consul\ConsulResponse;
  • If the API responds with a 4xx response, a Consul\Exception\ClientException is thrown;
  • If the API responds with a 5xx response, a Consul\Exception\ServeException is thrown.

Cookbook

How to acquire an exclusive lock?

$session = new Consul\Services\Session();

$sessionId = $session->create()->json()['ID'];

// Lock a key / value with the current session
$lockAcquired = $kv->put('tests/session/a-lock', 'a value', ['acquire' => $sessionId])->json();

if (false === $lockAcquired) {
    $session->destroy($sessionId);

    echo "The lock is already acquire by another node.\n";
    exit(1);
}

echo "Do you jobs here....";
sleep(5);
echo "End\n";

$kv->delete('tests/session/a-lock');
$session->destroy($sessionId);

How to use MultiLockHandler?

$resources = ['resource1', 'resource2'];

$multiLockHandler = new MultiLockHandler($resources, 60, new Session(), new KV(), 'my/lock/');

if ($multiLockHandler->lock()) {
    try {
        echo "Do you jobs here....";
    } finally {
        $multiLockHandler->release();    
    }
}

How to use MultiSemaphore?

$resources = [
    new Resource('resource1', 2, 7),
    new Resource('resource2', 3, 6),
    new Resource('resource3', 1, 1),
];

$semaphore = new MultiSemaphore($resources, 60, new Session(), new KV(), 'my/semaphore');

if ($semaphore->acquire()) {
    try {
        echo "Do you jobs here....";
    } finally {
        $semaphore->release();    
    }
}

Some utilities

  • Consul\Helper\LockHandler: Simple class that implement a distributed lock
  • Consul\Helper\MultiLockHandler: Simple class that implements a distributed lock for many resources
  • Consul\Helper\MultiSemaphore: Simple class that implements a distributed semaphore for many resources

Run the test suite

You need a consul agent running on localhost:8500., (*7)

But you ca override this address:, (*8)

export CONSUL_HTTP_ADDR=172.17.0.2:8500

If you don't want to install Consul locally you can use a docker container:, (*9)

docker run -d --name=dev-consul -e CONSUL_BIND_INTERFACE=eth0 consul

Then, run the test suite, (*10)

vendor/bin/simple-phpunit

The Versions

15/09 2017

dev-master

9999999-dev

SDK to talk with consul.io API

  Sources   Download

MIT

The Requires

 

25/07 2017

v3.0.0

3.0.0.0

SDK to talk with consul.io API

  Sources   Download

MIT

The Requires

 

06/03 2017

dev-CS

dev-CS

SDK to talk with consul.io API

  Sources   Download

MIT

The Requires

 

06/03 2017

v2.1.0

2.1.0.0

SDK to talk with consul.io API

  Sources   Download

MIT

The Requires

 

05/07 2016

v2.0.0

2.0.0.0

SDK to talk with consul.io API

  Sources   Download

MIT

The Requires

 

08/12 2014

v1.0.0

1.0.0.0

SDK to talk with consul.io API

  Sources   Download

MIT

The Requires