A simple ping-pong service implementation that that integrates ringpop to forward requests between nodes.

This example it's different than the others because it uses ringpop specific generated code to avoid some of the boilerplate.

# Running the example

All commands are relative to this directory:
cd examples/ping-thrift-gen

(optional, the files are already included) Generate the thrift code:
thrift-gen --generateThrift --outputDir gen-go --inputFile ping.thrift --template

Build the example binary:
go build

Start a custer of 5 nodes using [tick-cluster][1]:
tick-cluster.js -n 5 ping-thrift-gen

Lookup the node `my_key` key belongs to using [tcurl][2]:
$ tcurl ringpop -P hosts.json /admin/lookup '{"key": "my_key"}'

Call the `PingPongService::Ping` endpoint (multiple times) and see the request being forwarded. Each request is sent to a random node in the cluster because of the `-P hosts.json` argument--but is always handled by the node owning the key. This can be seen in the `from` field of the response:
$ tcurl pingchannel -P hosts.json --thrift ./ping.thrift PingPongService::Ping '{"request": {"key": "my_key"}}'
{"ok":true,"head":{},"body":{"message":"Hello, world!","from_":"","pheader":""},"headers":{"as":"thrift"},"trace":"650cbf0656e215e2"}

Optionally, set the `p` header. This value will be forwarded together with the request body to the node owning the key. Its value is returned in the response body in the `pheader` field:
$ tcurl pingchannel -P hosts.json /ping '{"key": "my_key"}' --headers '{"p": "my_header"}'
{"ok":true,"head":{},"body":{"message":"Hello, world!","from_":"","pheader":"my_header"},"headers":{"as":"thrift"},"trace":"b5526f9625a88347"}


Imports 8 package(s) ΒΆ