lucas-simoes/eureka-client-php

Spring Cloud Eureka发现服务器的PHP客户端。

0.0.2 2018-04-28 18:45 UTC

This package is auto-updated.

Last update: 2024-09-29 05:36:07 UTC


README

为(Spring Cloud) Netflix Eureka服务注册和发现提供PHP客户端。

安装

您可以使用Composer轻松安装此包

composer require "piwvh/php-eureka"

文档

创建Eureka客户端

您需要做的第一件事是使用您的配置创建一个EurekaClient的实例

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

所有可用的配置包括

  • eurekaDefaultUrl(默认:https://:8761);
  • 主机名
  • 应用程序名
  • IP地址
  • status(默认:UP
  • overriddenStatus(默认:UNKNOWN
  • 端口
  • securePort(默认:[443, false])
  • countryId(默认:1
  • dataCenterInfo(默认:[com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo, MyOwn])
  • 主页URL
  • 状态页URL
  • 健康检查URL
  • 虚拟IP地址
  • 安全虚拟IP地址
  • heartbeatInterval(默认:30
  • discoveryStrategy(默认:RandomStrategy
  • 实例提供者

您还可以在创建EurekaClient实例后更改配置,使用setter方法

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

操作

在创建EurekaClient实例后,您将可以进行多个操作

  • 注册:将您的服务实例注册到Eureka
$client->register();
  • 注销:从Eureka注销您的服务实例
$client->deRegister();
  • 心跳:向Eureka发送心跳,以确定客户端正在运行(一次性心跳)
$client->heartbeat();

您可以使用start()方法注册您的实例并定期发送心跳

$client->start();

使用此方法,首先您的服务将使用您提供的配置在Eureka中注册。之后,将根据heartbeatInterval配置值定期向Eureka发送心跳。此间隔时间可以像其他任何配置项一样更改

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

显然,此方法应在CLI中使用。

  • 服务发现:从Eureka获取服务的实例
$instance = $client->fetchInstance("the-service");
$homePageUrl = $instance->homePageUrl;

发现策略

当从Eureka获取服务的实例时,您可能得到一个可用实例的列表。您可以根据所需的负载均衡策略选择其中一个。例如,轮询或随机策略可能是您的选择。

目前此库仅支持RandomStrategy,但您可以通过实现DiscoveryStrategy接口的getInstance()方法创建自定义策略

class RoundRobinStrategy implements DiscoveryStrategy {

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

然后,您只需将您的自定义策略引入到EurekaClient实例中即可

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

本地注册表和缓存

失败在云原生或分布式应用程序中是不可避免的。因此,有时由于故障,Eureka可能不可用。在这种情况下,我们应该有一个服务的本地注册表来避免级联故障。

默认情况下,如果Eureka宕机,则fetchInstance()方法失败,因此应用程序会抛出异常而无法继续工作。为了解决这个问题,您应该在应用程序中创建一个本地注册表。

有一个名为InstanceProvider的接口,您可以利用它。您应该实现此接口的getInstances()方法,并根据您的理想逻辑返回服务的实例。

class MyProvider implements InstanceProvider {

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

在此示例中,我们已在数据库中缓存了服务的实例,并在Eureka宕机时加载它们。

创建您的自定义提供者后,只需将其添加到配置中即可让它工作

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

您的自定义提供者只有在Eureka服务不可用或无法正确响应时才会被调用。

这就完了。通过添加此功能,即使Eureka服务不可用,您的应用程序也能继续运行。

为了缓存特定服务的所有可用实例,您可以调用fetchInstances()方法,该方法从Eureka获取服务的所有实例。

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