Hyperf基于consul的服务注册与发现

一、安装consul

1、访问 Consul 的官网:https://www.consul.io
2、Consul 下载页:https://www.consul.io/downloads.html
3、安装 Consul

  1. wget https://releases.hashicorp.com/consul/1.6.1/consul_1.6.1_linux_amd64.zip
  2. unzip consul_1.5.1_linux_amd64.zip -d /usr/local/bin
  3. // 编辑 /etc/profile 文件,添加环境变量,保存后退出
  4. vi /etc/profile
  5. export CONSUL_HOME=/usr/local/bin/consul
  6. export PATH=$PATH:CONSUL_HOME
  7. // 使用环境变量配置生效
  8. source /etc/profile
  9. // 验证 Consul 安装是否成功,在命令行输入:consul
  10. consul --version
  11. // 输出结果
  12. Consul v1.6.1
  13. Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)

二、把 CalculatorService 服务发布到 Consul

修改文件:app/JsonRpc/CalculatorService.php

  1. <?php
  2. namespace App\JsonRpc;
  3. use Hyperf\RpcServer\Annotation\RpcService;
  4. /**
  5. * Class CalculatorService
  6. * @RpcService(name="CalculatorService", protocol="jsonrpc", server="jsonrpc", publishTo="consul")
  7. */
  8. class CalculatorService implements CalculatorServiceInterface
  9. {
  10. public function add(int $v1, int $v2): int
  11. {
  12. return $v1 + $v2;
  13. }
  14. }

三、配置 gateway 从 Consul 中获取服务节点

修改配置文件:config/autoload/services.php

  1. <?php
  2. declare(strict_types=1);
  3. return [
  4. 'consumers' => [
  5. [
  6. // name 需与服务提供者的 name 属性相同
  7. 'name' => 'CalculatorService',
  8. // 服务接口名,可选,默认值等于 name 配置的值,如果 name 直接定义为接口类则可忽略此行配置,如 name 为字符串则需要配置 service 对应到接口类
  9. 'service' => \App\JsonRpc\CalculatorServiceInterface::class,
  10. // 对应容器对象 ID,可选,默认值等于 service 配置的值,用来定义依赖注入的 key
  11. 'id' => \App\JsonRpc\CalculatorServiceInterface::class,
  12. // 服务提供者的服务协议,可选,默认值为 jsonrpc-http
  13. 'protocol' => 'jsonrpc',
  14. // 负载均衡算法,可选,默认值为 random
  15. 'load_balancer' => 'random',
  16. // 这个消费者要从哪个服务中心获取节点信息,如不配置则不会从服务中心获取节点信息
  17. 'registry' => [
  18. 'protocol' => 'consul',
  19. 'address' => 'http://127.0.0.1:8500',
  20. ],
  21. // 如果没有指定上面的 registry 配置,即为直接对指定的节点进行消费,通过下面的 nodes 参数来配置服务提供者的节点信息
  22. 'nodes' => [
  23. //['host' => '127.0.0.1', 'port' => 9501],
  24. ],
  25. ]
  26. ],
  27. ];

四、启动各服务

1、启动 Consul: consul agent -dev -client 0.0.0.0 -ui
2、访问 Consul 控制台: 192.168.1.155:8500
3、启动 Calculate: root@virtualBox:/home/wwwroot/calculate# php bin/hyperf.php start
4、启动 Gateway: root@virtualBox:/home/wwwroot/gateway# php bin/hyperf.php start



评论 0

发表评论

Top