Skip to content

qp/go

Repository files navigation

go GoDoc wercker status

The Go implementation of the QP protocol.

Usage

See the example code for a working example of how to implement Go services using QP.

Publish

Use a NewPublisher to publish events.

// make a transport
transport := redis.NewPubSub("127.0.0.1:6379")
transport.Start()
defer transport.Stop()

// make a publisher
pub := qp.NewPublisher("name", "instanceID", qp.JSON, transport)

// publish messages
pub.Publish("channel1", "Hello QP")
pub.Publish("channel2", "Bonjour QP")
pub.Publish("channel3", "¡hola! QP")

Subscribe

Use a NewSubscriber to subscribe to events.

// make a transport
transport := redis.NewPubSub("127.0.0.1:6379")
transport.Start()
defer transport.Stop()

// make a subscriber
sub := qp.NewSubscriber(qp.JSON, transport)

// subscribe to messages
sub.SubscribeFunc("channel1", func(event *qp.Event) {
  log.Println(event)
})
sub.SubscribeFunc("channel2", func(event *qp.Event) {
  log.Println(event)
})
sub.SubscribeFunc("channel3", func(event *qp.Event) {
  log.Println(event)
})

Request

Use a NewRequester to make requests.

// make a transport
transport := redis.NewDirect("127.0.0.1:6379")
transport.Start()
defer transport.Stop()

// make a requester
req := qp.NewRequester("webserver", "one", qp.JSON, t)

// issue a request and wait 1 second for the response
response := req.Issue([]string{"channel1","channel2","channel3"}, "some data").Response(1 * time.Second)

log.Println(response)

Responders

Use a NewResponder to respond to requests.

// make a transport
transport := redis.NewDirect("127.0.0.1:6379")
transport.Start()
defer transport.Stop()

res := qp.NewResponder("service", "one", qp.JSON, t)
res.HandleFunc("channel1", func(r *qp.Request) {
  // do some work and update r.Data
})
res.HandleFunc("channel2", func(r *qp.Request) {
  // do some work and update r.Data
})

Service

A Service is a special Responder that responds to requests on a channel of its own name.

// make a transport
transport := redis.NewDirect("127.0.0.1:6379")
transport.Start()
defer transport.Stop()

qp.ServiceFunc("serviceName", "instance", qp.JSON, transport, func(r *qp.Request) {
  // provide your service
})

About

The Go implementation of the QP protocol.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published