fuermao / eureka_php
使用eureka服务注册PHP服务
Requires
- php: >=7.1
- guzzlehttp/guzzle: ^6.3
This package is not auto-updated.
Last update: 2024-09-26 03:38:58 UTC
README
说明
该版本是在piwvh/php-eureka基础上进行了一些配置优化。
使用说明
安装
使用composer依赖管理工具进行安装即可;
composer require "yckj/eureka_php"
使用
该组件基本未改变原始用法,仅增加了日志记录功能。可参考原作者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地址状态(默认:UP)overriddenStatus(默认:UNKNOWN)端口号securePort(默认:['443', false])countryId(默认:1)dataCenterInfo(默认:['com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo', 'MyOwn'])主页URL状态页URL健康检查URLvip地址secureVipAddressheartbeatInterval(默认: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
- 服务发现:从Eureka获取服务的实例
$instance = $client->fetchInstance("the-service"); $homePageUrl = $instance->homePageUrl;
发现策略
当从Eureka获取服务的实例时,您可能会得到一个已注册到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的接口,您可以利用它。您应该实现此接口的getInstance()方法,并根据您的理想逻辑返回服务的实例。
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");