2017 © Pedro Peláez
 

library php-eureka

A PHP client for Spring Cloud Eureka discovery server.

image

piwvh/php-eureka

A PHP client for Spring Cloud Eureka discovery server.

  • Wednesday, July 11, 2018
  • by piwvh
  • Repository
  • 0 Watchers
  • 12 Stars
  • 26 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 3 Versions
  • 86 % Grown

The README.md

PHP Netflix Eureka Client

A PHP client for (Spring Cloud) Netflix Eureka service registration and discovery., (*1)

Installation

You can install this package using Composer:, (*2)

composer require "piwvh/php-eureka", (*3)

Documentation

Create Eureka Client

The very first thing you need to do is to create an instance of EurekaClient using your own configuration:, (*4)

$client = new EurekaClient([
    'eurekaDefaultUrl' => 'http://localhost:8761/eureka',
    'hostName' => 'service.hamid.work',
    'appName' => 'service',
    'ip' => '127.0.0.1',
    'port' => ['8080', true],
    'homePageUrl' => 'http://localhost:8080',
    'statusPageUrl' => 'http://localhost:8080/info',
    'healthCheckUrl' => 'http://localhost:8080/health'
]);

List of all available configuration are as follows:, (*5)

  • eurekaDefaultUrl (default: http://localhost:8761);
  • hostName
  • appName
  • ip
  • status (default: UP)
  • overriddenStatus (default: UNKNOWN)
  • port
  • securePort (default: ['443', false])
  • countryId (default: 1)
  • dataCenterInfo (default: ['com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo', 'MyOwn'])
  • homePageUrl
  • statusPageUrl
  • healthCheckUrl
  • vipAddress
  • secureVipAddress
  • heartbeatInterval (default: 30)
  • discoveryStrategy (default: RandomStrategy)
  • instanceProvider

You can also change the configuration after creating EurekaClient instance, using setter methods:, (*6)

$client->getConfig()->setAppName("my-service");

Operations

After creating EurekaClient instance, there will be multiple operations to perform: - Registration: register your service instance with Eureka, (*7)

$client->register();
  • De-registration: de-register your service instance from Eureka
$client->deRegister();
  • Heartbeat: send heartbeat to Eureka, to show the client is up (one-time heartbeat)
$client->heartbeat();

You can register your instance and send periodic heartbeat using start() method:, (*8)

$client->start();

Using this method, first your service gets registered with Eureka using the configuration you have provided. Then, a heartbeat will be sent to the Eureka periodically, based on heartbeatInterval configuration value. This interval time can be changed just like any other configuration item:, (*9)

$client->getConfig()->setHeartbeatInterval(60); // 60 seconds

It's apparent that this method should be used in CLI. - Service Discovery: fetch an instance of a service from Eureka:, (*10)

$instance = $client->fetchInstance("the-service");
$homePageUrl = $instance->homePageUrl;

Discovery Strategy

When fetching instances of a service from Eureka, you probably get a list of available instances. You can choose one of them based on your desired strategy of load balancing. For example, a Round-robin or a Random strategy might be your choice., (*11)

Currently, this library only supports RandomStrategy, however, you can create your custom strategy by implementing getInstance() method of DiscoveryStrategy interface:, (*12)

class RoundRobinStrategy implements DiscoveryStrategy {

    public function getInstance($instances) {
        // return an instance
    }

}

Then, all you have to do is to introduce your custom strategy to EurekaClient instance:, (*13)

$client->getConfig()->setDiscoveryStrategy(new RoundRobinStrategy());

Local Registry and Caching

Failure is inevitable, specially in cloud-native applications. Thus, sometimes Eureka may not be available because of failure. In these cases, we should have a local registry of services to avoid cascading failures., (*14)

By default, if Eureka is down, the fetchInstance() method fails, so an exception would be thrown and the application cannot continue to work. To solve this problem, you should create a local registry of services., (*15)

There is an interface called InstanceProvider which you can make use of, by implementing getInstances() method of this interface and returning instances of a service based on your ideal logic., (*16)

class MyProvider implements InstanceProvider {

    public function getInstances($appName) { 
        // return cached instances of the service from the Redis 
    }
}

In this example, we have cached the instances of the service in the Redis and are loading them when Eureka is down., (*17)

After creating your custom provider, just make it work by adding it to the configuration:, (*18)

$client->getConfig()->setInstanceProvider(new MyProvider());

Your custom provider only gets called when Eureka is down or is not answering properly., (*19)

That's all you need to do. By adding this functionality, your application keeps working even when Eureka is down., (*20)

For caching all available instances of a specific service, you can call fetchInstances() method which fetches all of the instances of the service from Eureka:, (*21)

$instances = $client->fetchInstances("the-service");

The Versions

11/07 2018

dev-master

9999999-dev http://hamid.work

A PHP client for Spring Cloud Eureka discovery server.

  Sources   Download

MIT

The Requires

 

php eureka spring cloud discovery server

28/04 2018

0.0.2

0.0.2.0 http://hamid.work

A PHP client for Spring Cloud Eureka discovery server.

  Sources   Download

MIT

The Requires

 

php eureka spring cloud discovery server

28/04 2018

0.0.1

0.0.1.0 http://hamid.work

A PHP client for Spring Cloud Eureka discovery server.

  Sources   Download

MIT

The Requires

 

php eureka spring cloud discovery server