Skip to content

sangwonl/mqrpc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mqrpc

Very simple RPC framework based on message queue system.

  • It supports AMQP only for now. (such like RabbitMQ)

Get Package

$ go get github.com/sangwonl/mqrpc

How to use

Import Package

import "github.com/sangwonl/mqrpc"

Creating MqService

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)
}

Adding Message Handler

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{}
})

Run Service

svc.Run(false)

// If you want to use SendToAny(),
// `enableWorker` flag must be set to true at server(worker) side.
// svc.Run(true)

Call RPC

msgClient := mqrpc.DefaultMessageService{MqService: svc}

args := SomeMsgPayload{hello: "world"}
resp, _ := msgClient.Request("myPeerName", "someMsgType", &args, 0)

var result Result
json.Unmarshal(resp.Payload, &result)

Example

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

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages