Go messaging library
goevents allows to dispatch events between applications.
An application produces events based on actions. Another application consume these events and maybe create new events.
Scenario: If an application produces an event "payment.received", another application may want to delivery the product to the buyer.
- AMQP
The consumer
conn, err := NewConnection("amqp://guest:[email protected]:5672/")
if err != nil {
panic(err)
}
defer conn.Close()
c, err := NewConsumer(conn, false, "events-exchange", "events-queue")
if err != nil {
panic(err)
}
defer c.Close()
c.Subscribe("object.*", func(body []byte) bool {
fmt.Println(body)
return true
})
go c.Consume()
select{}The producer
conn, err := NewConnection("amqp://guest:[email protected]:5672/")
if err != nil {
panic(err)
}
defer conn.Close()
p, err := NewProducer(conn, "events-exchange", "events-queue")
if err != nil {
panic(err)
}
defer p.Close()
err = p.Publish("object.my_action", []byte("message"))
if err != nil {
panic(err)
}When using producer, always close all your producers (things who call the producer.Publish) before closing the producer itself (producer.Close).
In this way, you have more garanties that your messages is delivered to RabbitMQ.