我用 php 调通了 go-micro 的grpc服务
我们都知道搞微服务,除了拥有完美生态的java Spring Cloud那套,golang的微服务架构也是非常理想的。而且golang相比java 的臃肿内存占用更小,golang引入了协程并发粒度相比java的多线程先对更小,更可控,并发学习成本更低,不得不说golang就是趋势。
但是相对国内来说,使用golang中小企业较少,而大多数从14,15年开始的中小型公司一直使用php,为了统一技术栈,会直接选型用swoole,而swoole的微服务的国内生态一直不怎么好,相关文档很让人诟病。
所以我这边直接选型golang。
使用 go-micro2.0服务配合consul 搭建微服务:
# 安装 protoc:
依赖:autoconf automake libtool curl make g++ unzip libffi-dev
下载:https://github.com/protocolbuffers/protobuf4.0
cd protoc ./autogen.sh ./configure make && make install
ldconfig //刷新共享库
测试:protoc -h
# gen-go-pro安装:
go get -v -u github.com/golang/protobuf/proto cd $GOPATH/src/github/golang/protobuf/gen-go-pro/ go bilud cp gen-go... /usr/bin
# protoc-gen-micro安装:
go get github.com/micro/micro/v2/cmd/protoc-gen-micro@master protoc --proto_path=$(shell pwd)/proto/ --micro_out=$(shell pwd)/protoorder --go_out=$(shell pwd)/protoorder $(shell pwd)/proto/*proto
# docker - consul部署
leader节点
docker run -d -p 8500:8500 -v /data/consul:/consul/data -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_1 4f7b214361a7 agent -server -bootstrap -ui -node=1 -client='0.0.0.0'
集群从节点
docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_2 4f7b214361a7 agent -client -node=clint -join='172.17.0.2' -client='0.0.0.0' docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_3 4f7b214361a7 agent -client -node=clint2 -join='172.17.0.2' -client='0.0.0.0'
consul服务界面
一个订单微服务源码:
https://github.com/mrgAndysm/mic_order
服务开启成功示例
那么如何用php 调用 golang的服务呢?
我们需要写个php_grpc客户端。
一、先下载插件grpc_php_plugin:
第一种方式:
通过官方文档编译方式:
$ git clone -b v1.33.1 https://github.com/grpc/grpc $ cd grpc && git submodule update --init && make grpc_php_plugin
这个方式会遇到网络问题,子模块拉不到,编译容易依赖报错。
第二种简单粗暴方式:
直接使用该地址的已编译好的plugin 插件。
https://github.com/torome/php_grpc.git
二、//php_plugin
执行命令
protoc --php_out=. --grpc_out=. --plugin=protoc-gen-grpc=/[PATH]/grpc_php_plugin *.proto
最后 让php_grpc客户端跑起来。
接下来就是解决 php服务发现与注册的问题,敬请期待...