Commit 0bc6dbce authored by Cristiano Urban's avatar Cristiano Urban
Browse files

Added basic RPC client and server test classes based on Redis.

parent 5a9847ee
Loading
Loading
Loading
Loading
+25 −0
Original line number Original line Diff line number Diff line
import json
import redis
import uuid

class RedisRpcClient(object):

    def __init__(self, redisHost, listName):
        self.client = redis.Redis(redisHost)
        self.listName = listName

    def send(self):
        print("Sending RPC request")
        request = {
          "jsonrpc": "2.0",
          "id": uuid.uuid1().hex
        }

        self.client.lpush(self.listName, json.dumps(request))
        channel, response = self.client.brpop(request["id"], timeout = 30)
        response = json.loads(response.decode("utf-8"))
        print(response)


client = RedisRpcClient('redis', 'testList')
client.send()
+33 −0
Original line number Original line Diff line number Diff line
import json
import redis

class RedisRpcServer(object):

    def __init__(self, redisUrl, listName):
        self.client = redis.from_url(redisUrl)
        self.listName = listName

    def start(self):
        print("Starting RPC server for " + self.listName)
        while True:
            channel, request = self.client.brpop(self.listName)
            channel = channel.decode("utf-8")
            request = json.loads(request.decode("utf-8"))

            print(channel)
            print(request)

            result = 42

            reply = {
              "jsonrpc": "2.0",
              "result": result,
              "id": request["id"]
            }

            self.client.rpush(request["id"], json.dumps(reply))
            self.client.expire(request["id"], 30)


server = RedisRpcServer('redis://job_cache:6379', 'testList')
server.start()