Very simple RPC framework based on message queue system.
- It supports AMQP only for now. (such like RabbitMQ)
$ go get github.com/sangwonl/mqrpc
import "github.com/sangwonl/mqrpc"
const AmqpURI = "amqp://mqrpc:mqrpc@localhost:5672/"
const Namespace = "examples.rpc"
const PeerName = "myPeerName"
svc, err := mqrpc.NewMqService(AmqpURI, Namespace, PeerName)
if err != nil {
panic(err)
}
svc.AddHandler("someMsgType", func(ctx *mqrpc.Context) interface{} {
var msgPayload SomeMsgPayload
json.Unmarshal(ctx.GetMessage().Payload, &msgPayload)
return nil
// If you have something to return to client
// return AnotherMsgPayload{}
})
svc.Run(false)
// If you want to use SendToAny(),
// `enableWorker` flag must be set to true at server(worker) side.
// svc.Run(true)
msgClient := mqrpc.DefaultMessageService{MqService: svc}
args := SomeMsgPayload{hello: "world"}
resp, _ := msgClient.Request("myPeerName", "someMsgType", &args, 0)
var result Result
json.Unmarshal(resp.Payload, &result)
You can find more details from /examples
.
For trying to run example, you might need to run rabbitmq instance.
docker run -d \
--name mqrpc \
--hostname mqrpc \
-e RABBITMQ_DEFAULT_USER=mqrpc \
-e RABBITMQ_DEFAULT_PASS=mqrpc \
-p 5672:5672 \
-p 15672:15672 \
rabbitmq:3.8.5-management