Simple gRPC example implemented in Go. It features a server and a client for a service that provides information about the weather.
This service relies on openweathermap.org's API and Weather Underground as weather information providers.
You will need to install protoc and the protoc-gen-go plugin in order to generate server and client stubs.
Additionally, you will need API keys for both providers.
Once that's all in place, you can build the server:
$ make build-server
And then run it:
$ OPEN_WEATHER_MAP_API_KEY="s3cr3+" WEATHER_UNDERGROUND_API_KEY="s3cr3+2" ./weather_server/server
If all goes well, you should see a message like this (assuming the server is running in the default port (i.e. 9000
):
2015/11/18 17:32:59 Listening on :9000
Similarly, you can build the client:
$ make build-client
And then run it, providing a location:
./weather_client/client Berlin, Germany
An example output:
2015/11/18 17:33:03 It's currently 9.5°C, broken clouds in Berlin, Germany
If you don't want to mess with your local environment and would prefer running everything in a Docker container, you have two options. The easiest option is running the existing image from Docker Hub, by running the following command:
$ docker run --rm -p 9000:9000 \
-e OPEN_WEATHER_MAP_API_KEY="<your-api-key-here>" \
-e WEATHER_UNDERGROUND_API_KEY="<your-api-key-here>" \
--name weather_service caiofilipini/grpc-weather:master
This command will pull the image from Docker Hub and run the weather_server
in a container. Then you can run the client on the same container:
$ docker exec weather_service weather_client Berlin, Germany
If you'd rather build the image yourself, just use the provided Dockerfile.