https://github.com/makasim/amqprpc
Go protocol agnostic RPC Client over AMQP.
https://github.com/makasim/amqprpc
amqp go golang rabbitmq rpc rpc-client
Last synced: 9 months ago
JSON representation
Go protocol agnostic RPC Client over AMQP.
- Host: GitHub
- URL: https://github.com/makasim/amqprpc
- Owner: makasim
- License: mit
- Created: 2020-06-12T16:30:45.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2020-12-02T16:47:25.000Z (over 5 years ago)
- Last Synced: 2025-02-16T19:48:22.305Z (about 1 year ago)
- Topics: amqp, go, golang, rabbitmq, rpc, rpc-client
- Language: Go
- Homepage:
- Size: 110 KB
- Stars: 1
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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:
```go
package main
import (
"log"
"time"
"github.com/makasim/amqpextra"
"github.com/makasim/amqprpc"
"github.com/streadway/amqp"
)
func main() {
consumerConn := amqpextra.Dial([]string{"amqp://guest:guest@rabbitmq:5672/amqprpc"})
publisherConn := amqpextra.Dial([]string{"amqp://guest:guest@rabbitmq:5672/amqprpc"})
client, err := amqprpc.New(publisherConn, consumerConn)
if err != nil {
log.Fatal(err)
}
defer client.Close()
call := client.Go(amqpextra.Publishing{
Key: "a_queue",
Message: amqp.Publishing{
Body: []byte(`Have you heard the news?`),
},
}, make(chan *amqprpc.Call, 1))
defer call.Close()
select {
case <-call.Done():
rpl, err := call.Delivery()
if err != nil {
log.Fatal(err)
return
}
log.Print(string(rpl.Body))
case <-time.NewTimer(time.Second).C:
// timeout
}
}
```