blob: ef531540de5677fbf02686157b172924b32aeabd [file] [view]
# Invoke service provider using grpc
> Doc metions below fit the code in the `samples/http/grpc`
## Define Pixiu Config
```yaml
static_resources:
listeners:
- name: "net/http"
protocol_type: "HTTP"
address:
socket_address:
address: "0.0.0.0"
port: 8881
filter_chains:
filters:
- name: dgp.filter.httpconnectionmanager
config:
route_config:
routes:
- match:
prefix: "/api/v1"
route:
cluster: "test-grpc"
cluster_not_found_response_code: 505
http_filters:
- name: dgp.filter.http.grpcproxy
config:
path: /mnt/d/WorkSpace/GoLandProjects/dubbo-go-pixiu/samples/http/grpc/proto
- name: dgp.filter.http.response
config:
server_name: "test-http-grpc"
generate_request_id: false
config:
idle_timeout: 5s
read_timeout: 5s
write_timeout: 5s
clusters:
- name: "test-grpc"
lb_policy: "RoundRobin"
endpoints:
- socket_address:
address: 127.0.0.1
port: 50001
protocol_type: "GRPC"
timeout_config:
connect_timeout: "5s"
request_timeout: "10s"
shutdown_config:
timeout: "60s"
step_timeout: "10s"
reject_policy: "immediacy"
```
> Grpc server is defined in the `clusters`
> WARN: currently http request only support json body to parse params
## Prepare for the Server
generate pb files under `samples/http/grpc/proto` with command:
```
protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative hello_grpc.proto
```
## Start server
run `samples/http/grpc/server/app/server.go`
```
go run server.go
```
## Build dubbo-go-pixiu
```
go build -o dubbo-go-pixiu cmd/pixiu/*
```
Or on Windows, you need to go under `cmd/pixiu` to build binary file
```
go build -o dubbo-go-pixiu.exe .
```
## Start Pixiu
```
./dubbo-go-pixiu gateway start --config samples/http/grpc/pixiu/conf.yaml --log-config samples/http/grpc/pixiu/log.yml
```
## Test Using Curl
Run command curl using:
```
curl http://127.0.0.1:8881/api/v1/provider.UserProvider/GetUser
```
and
```
curl http://127.0.0.1:8881/api/v1/provider.UserProvider/GetUser -X POST -d '{"userId":1}'
```
> If response body is a json, the header of 'content-type' will set to 'application/json'. If it is just a plain text, the header of 'content-type' is 'text/plain'.