项目作者: makasim

项目描述 :
Go protocol agnostic RPC Client over AMQP.
高级语言: Go
项目地址: git://github.com/makasim/amqprpc.git
创建时间: 2020-06-12T16:30:45Z
项目社区:https://github.com/makasim/amqprpc

开源协议:MIT License

下载


Golang AMQP RPC Client

Features:

  • Protocol agnostic RPC Client over AMQP.
  • Can simultaneity talk to multiple servers.
  • Call cancellation.
  • Buffer multiple replies in a channel.
  • Separate publisher\consumer connections.
  • Multiple consumer workers.
  • Auto reconnect.
  • Client close method wait for calls inflight to finish.

Example:

  1. package main
  2. import (
  3. "log"
  4. "time"
  5. "github.com/makasim/amqpextra"
  6. "github.com/makasim/amqprpc"
  7. "github.com/streadway/amqp"
  8. )
  9. func main() {
  10. consumerConn := amqpextra.Dial([]string{"amqp://guest:guest@rabbitmq:5672/amqprpc"})
  11. publisherConn := amqpextra.Dial([]string{"amqp://guest:guest@rabbitmq:5672/amqprpc"})
  12. client, err := amqprpc.New(publisherConn, consumerConn)
  13. if err != nil {
  14. log.Fatal(err)
  15. }
  16. defer client.Close()
  17. call := client.Go(amqpextra.Publishing{
  18. Key: "a_queue",
  19. Message: amqp.Publishing{
  20. Body: []byte(`Have you heard the news?`),
  21. },
  22. }, make(chan *amqprpc.Call, 1))
  23. defer call.Close()
  24. select {
  25. case <-call.Done():
  26. rpl, err := call.Delivery()
  27. if err != nil {
  28. log.Fatal(err)
  29. return
  30. }
  31. log.Print(string(rpl.Body))
  32. case <-time.NewTimer(time.Second).C:
  33. // timeout
  34. }
  35. }