Hyperf-consul容器ping不通的情况
来看看今天遇到的问题
PHP Fatal error: Uncaught GuzzleHttp\Exception\ConnectException: Connection refused in /data/project/hyperf-server/vendor/hyperf/guzzle/src/CoroutineHandler.php:77
Stack trace:
#0 /data/project/hyperf-server/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php(35): Hyperf\Guzzle\CoroutineHandler->__invoke()
#1 /data/project/hyperf-server/vendor/guzzlehttp/guzzle/src/Middleware.php(31): GuzzleHttp\PrepareBodyMiddleware->__invoke()
#2 /data/project/hyperf-server/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php(71): GuzzleHttp\Middleware::GuzzleHttp\{closure}()
#3 /data/project/hyperf-server/vendor/guzzlehttp/guzzle/src/Middleware.php(63): GuzzleHttp\RedirectMiddleware->__invoke()
#4 /data/project/hyperf-server/vendor/guzzlehttp/guzzle/src/HandlerStack.php(75): GuzzleHttp\Middleware::GuzzleHttp\{closure}()
#5 /data/project/hyperf-server/vendor/guzzlehttp/guzzle/src/Client.php(331): GuzzleHttp\HandlerStack->__invoke()
#6 /data/project/hyperf-server/vendor/guzzlehttp/guzzle/src/Client.php(168): GuzzleHttp\Client->transfer()
# in /data/project/hyperf-server/vendor/hyperf/consul/src/Client.php on line 70
看报错非常清楚 8500连接拒绝了 问题场景:consul是一个容器,服务提供者是一个容器,consul影视开放8500端口,服务提供者9502端口
/**
* 注意,如希望通过服务中心来管理服务,需在注解内增加 publishTo 属性
* @RpcService(name="AddService", protocol="jsonrpc-http", server="jsonrpc-http",publishTo="consul")
*/
加上publishTo注册中心就报上面的错误:很明显连接拒绝
在容器里面各种ping consul8500 curl8500都没问题
查看网络组
[root@localhost ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
0939f9e43698 bridge bridge local
jg68sh2e8jrk default-network overlay swarm
5354c65d14e4 docker_gwbridge bridge local
c1781be3a3b5 host host local
5bx6olp033yg hyperf-network swarm
d179f23097c2 hyperf_network bridge local
v018djj8and5 ingress overlay swarm
32f9a199f4c9 none null local
hyperf_network是我给服务提供者消费者单独开的一个网络
再看看这个网络
docker network inspect hyperf_network
[root@localhost ~]# docker network inspect hyperf_network
[
{
"Name": "hyperf_network",
"Id": "d179f23097c23e4870781facd6bb19e32ab5908241c270ed077d4f8a721642a9",
"Created": "2022-10-22T18:42:28.460386169+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.19.0.0/16",
"Gateway": "172.19.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"0519939e3cb92e364fe9d199454b1d316ec0c84fb2f7c839a93934cf57579ca1": {
"Name": "hyperf-server",
"EndpointID": "08202c765af9fae304266d6ffbeb0f23e2541e451a7107141bcbfa7478109789",
"MacAddress": "02:42:ac:13:00:03",
"IPv4Address": "172.19.0.3/16",
"IPv6Address": ""
},
"07a0aa48a6d5b0ef323e120f72198b01163c7e03cd463b18a04099b28a564175": {
"Name": "hyperf-http",
"EndpointID": "5a446c6f7b7c3300a6b97709e1f7ca50e0887b22ee913d9f7fbdc4118e9ec272",
"MacAddress": "02:42:ac:13:00:02",
"IPv4Address": "172.19.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
网络没有consol 难道是这个原因?
不管了先加上去
[root@localhost ~]# docker network connect hyperf_network consul
//附带从网络移除命令
[root@localhost ~]# docker network disconnect hyperf_network consul
再看看
docker network inspect hyperf_network
[
{
"Name": "hyperf_network",
"Id": "d179f23097c23e4870781facd6bb19e32ab5908241c270ed077d4f8a721642a9",
"Created": "2022-10-22T18:42:28.460386169+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.19.0.0/16",
"Gateway": "172.19.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"0519939e3cb92e364fe9d199454b1d316ec0c84fb2f7c839a93934cf57579ca1": {
"Name": "hyperf-server",
"EndpointID": "08202c765af9fae304266d6ffbeb0f23e2541e451a7107141bcbfa7478109789",
"MacAddress": "02:42:ac:13:00:03",
"IPv4Address": "172.19.0.3/16",
"IPv6Address": ""
},
"07a0aa48a6d5b0ef323e120f72198b01163c7e03cd463b18a04099b28a564175": {
"Name": "hyperf-http",
"EndpointID": "5a446c6f7b7c3300a6b97709e1f7ca50e0887b22ee913d9f7fbdc4118e9ec272",
"MacAddress": "02:42:ac:13:00:02",
"IPv4Address": "172.19.0.2/16",
"IPv6Address": ""
},
"83e332a7635ce7c317c8233d1064830e5ef3334a9a98d66c2c58c581e39ebbce": {
"Name": "consul",
"EndpointID": "39214a0ee4285f966dd01fc125d061f2c493a332727885571733372b1cb4fa80",
"MacAddress": "02:42:ac:13:00:04",
"IPv4Address": "172.19.0.4/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
结果还是一样拒绝连接
最后解决方案:
官方文档配置文件复制了衣服跟过来就没有了,应该是我配置原因
发布服务到 consul
在 Hyperf 也是非常容易的一件事情,通过 composer require hyperf/service-governance-consul
引用组件(如果已安装则可忽略该步骤),然后再在 config/autoload/services.php
配置文件内配置 drivers.consul
配置即可
<?php
return [
'enable' => [
'discovery' => true,
'register' => true,
],
'consumers' => [],
'providers' => [],
'drivers' => [
'consul' => [
'uri' => 'http://127.0.0.1:8500',
'token' => '',
],
'nacos' => [
// nacos server url like https://nacos.hyperf.io, Priority is higher than host:port
// 'url' => '',
// The nacos host info
'host' => '127.0.0.1',
'port' => 8848,
// The nacos account info
'username' => null,
'password' => null,
'guzzle' => [
'config' => null,
],
'group_name' => 'api',
'namespace_id' => 'namespace_id',
'heartbeat' => 5,
],
],
];
再次启动解决了,
consoul 和服务提供者最好在一个网络下面 否则会报其他错误
- 版权申明:此文如未标注转载均为本站原创,自由转载请表明出处《龙行博客》。
- 本文网址:https://www.liaotaoo.cn/415.html
- 上篇文章:Hyper服务消费者统一响应
- 下篇文章:安装Composer警告提示