1. 注册服务:
app\Consul\RegisterServiceListener.php:
namespace App\Consul;
use Swoft\Bean\Annotation\Mapping\Inject;
use Swoft\Consul\Agent;
use Swoft\Event\Annotation\Mapping\Listener;
use Swoft\Event\EventHandlerInterface;
use Swoft\Event\EventInterface;
use Swoft\Http\Server\HttpServer;
use Swoft\Log\Helper\CLog;
use Swoft\Server\SwooleEvent;
/**
* @Listener(event=SwooleEvent::START)
*/
class RegisterServiceListener implements EventHandlerInterface
{
/**
* @Inject()
* @var Agent
*/
private $agent;
/**
* @param EventInterface $event
*/
public function handle(EventInterface $event): void
{
/** @var HttpServer $httpServer */
$httpServer = $event->getTarget();
$service = [
'ID' => 'order-server-01', // id一定不能重复
'Name' => 'order', // name希望重复,可以做负载均衡
'Tags' => [
'http'
],
'Address' => '192.168.33.88', // 这里指的是需要注册的服务器IP与prot
'Port' => 8306, // Port of type int,写成string会报错
'Meta' => [
'version' => '1.0'
],
'EnableTagOverride' => false,
'Weights' => [
'Passing' => 10,
'Warning' => 1
]
];
// Register
$this->agent->registerService($service);
CLog::info('Swoft http register service success by consul!');
}
}
注:
①. 有了Listener注解,就会执行下面的handle方法
②. 点在没有引入类的代码,按alt + enter,可以自动引入类.
③. 这里可以单独自己写一个consul文件夹(这里说明的是思路),也可以用默认的Listen文件夹.代码是一样的.
(1). 修改consul默认地址:
如果不修改,默认会注册到本机.
app\bean.php:
return [
'consul' => [
'host' => '192.168.33.88', // 这是consul的ip和port
'port' => 8500 // 注意不能是string类型
],
...
]
(2). 如何查看默认consol地址:
①. 点击注册服务的registerService:
$this->agent->registerService($service);
②. 跳到vendor\swoft\consul\src\Agent.php的registerService方法.
public function registerService(array $service): Response
{
$params = [
'body' => $service,
];
return $this->consul->put('/v1/agent/service/register', $params);
}
/**
* @Inject()
* @var Consul // 点击这里跳到下面
*/
private $consul;
③. 跳到vendor\swoft\consul\src\Consul.php:
private $host = '127.0.0.1'; // 如果不在bean.php中重写host、port,就会默认是本机