1
0
mirror of https://github.com/go-micro/go-micro.git synced 2025-06-30 22:33:49 +02:00
Files
go-micro/broker/rabbitmq/rabbitmq_test.go
Brian Ketelsen ddc34801ee Plugins and profiles (#2764)
* feat: more plugins

* chore(ci): split out benchmarks

Attempt to resolve too many open files in ci

* chore(ci): split out benchmarks

* fix(ci): Attempt to resolve too many open files in ci

* fix: set DefaultX for cli flag and service option

* fix: restore http broker

* fix: default http broker

* feat: full nats profile

* chore: still ugly, not ready

* fix: better initialization for profiles

* fix(tests): comment out flaky listen tests

* fix: disable benchmarks on gha

* chore: cleanup, comments

* chore: add nats config source
2025-05-20 13:24:06 -04:00

306 lines
6.3 KiB
Go

package rabbitmq_test
import (
"context"
"encoding/json"
"os"
"testing"
"time"
"go-micro.dev/v5/logger"
micro "go-micro.dev/v5"
broker "go-micro.dev/v5/broker"
rabbitmq "go-micro.dev/v5/broker/rabbitmq"
server "go-micro.dev/v5/server"
)
type Example struct{}
func init() {
rabbitmq.DefaultRabbitURL = "amqp://rabbitmq:rabbitmq@127.0.0.1:5672"
}
type TestEvent struct {
Name string `json:"name"`
Age int `json:"age"`
Time time.Time `json:"time"`
}
func (e *Example) Handler(ctx context.Context, r interface{}) error {
return nil
}
func TestDurable(t *testing.T) {
if tr := os.Getenv("TRAVIS"); len(tr) > 0 {
t.Skip()
}
brkrSub := broker.NewSubscribeOptions(
broker.Queue("queue.default"),
broker.DisableAutoAck(),
rabbitmq.DurableQueue(),
)
b := rabbitmq.NewBroker()
b.Init()
if err := b.Connect(); err != nil {
t.Logf("cant conect to broker, skip: %v", err)
t.Skip()
}
s := server.NewServer(server.Broker(b))
service := micro.NewService(
micro.Server(s),
micro.Broker(b),
)
h := &Example{}
// Register a subscriber
micro.RegisterSubscriber(
"topic",
service.Server(),
h.Handler,
server.SubscriberContext(brkrSub.Context),
server.SubscriberQueue("queue.default"),
)
// service.Init()
if err := service.Run(); err != nil {
t.Fatal(err)
}
}
func TestWithoutExchange(t *testing.T) {
b := rabbitmq.NewBroker(rabbitmq.WithoutExchange())
b.Init()
if err := b.Connect(); err != nil {
t.Logf("cant conect to broker, skip: %v", err)
t.Skip()
}
s := server.NewServer(server.Broker(b))
service := micro.NewService(
micro.Server(s),
micro.Broker(b),
)
brkrSub := broker.NewSubscribeOptions(
broker.Queue("direct.queue"),
broker.DisableAutoAck(),
rabbitmq.DurableQueue(),
)
// Register a subscriber
err := micro.RegisterSubscriber(
"direct.queue",
service.Server(),
func(ctx context.Context, evt *TestEvent) error {
logger.Logf(logger.InfoLevel, "receive event: %+v", evt)
return nil
},
server.SubscriberContext(brkrSub.Context),
server.SubscriberQueue("direct.queue"),
)
if err != nil {
t.Fatal(err)
}
go func() {
time.Sleep(5 * time.Second)
logger.Logf(logger.InfoLevel, "pub event")
jsonData, _ := json.Marshal(&TestEvent{
Name: "test",
Age: 16,
})
err := b.Publish("direct.queue", &broker.Message{
Body: jsonData,
},
rabbitmq.DeliveryMode(2),
rabbitmq.ContentType("application/json"))
if err != nil {
t.Fatal(err)
}
}()
// service.Init()
if err := service.Run(); err != nil {
t.Fatal(err)
}
}
func TestFanoutExchange(t *testing.T) {
b := rabbitmq.NewBroker(rabbitmq.ExchangeType(rabbitmq.ExchangeTypeFanout), rabbitmq.ExchangeName("fanout.test"))
b.Init()
if err := b.Connect(); err != nil {
t.Logf("cant conect to broker, skip: %v", err)
t.Skip()
}
s := server.NewServer(server.Broker(b))
service := micro.NewService(
micro.Server(s),
micro.Broker(b),
)
brkrSub := broker.NewSubscribeOptions(
broker.Queue("fanout.queue"),
broker.DisableAutoAck(),
rabbitmq.DurableQueue(),
)
// Register a subscriber
err := micro.RegisterSubscriber(
"fanout.queue",
service.Server(),
func(ctx context.Context, evt *TestEvent) error {
logger.Logf(logger.InfoLevel, "receive event: %+v", evt)
return nil
},
server.SubscriberContext(brkrSub.Context),
server.SubscriberQueue("fanout.queue"),
)
if err != nil {
t.Fatal(err)
}
go func() {
time.Sleep(5 * time.Second)
logger.Logf(logger.InfoLevel, "pub event")
jsonData, _ := json.Marshal(&TestEvent{
Name: "test",
Age: 16,
})
err := b.Publish("fanout.queue", &broker.Message{
Body: jsonData,
},
rabbitmq.DeliveryMode(2),
rabbitmq.ContentType("application/json"))
if err != nil {
t.Fatal(err)
}
}()
// service.Init()
if err := service.Run(); err != nil {
t.Fatal(err)
}
}
func TestDirectExchange(t *testing.T) {
b := rabbitmq.NewBroker(rabbitmq.ExchangeType(rabbitmq.ExchangeTypeDirect), rabbitmq.ExchangeName("direct.test"))
b.Init()
if err := b.Connect(); err != nil {
t.Logf("cant conect to broker, skip: %v", err)
t.Skip()
}
s := server.NewServer(server.Broker(b))
service := micro.NewService(
micro.Server(s),
micro.Broker(b),
)
brkrSub := broker.NewSubscribeOptions(
broker.Queue("direct.exchange.queue"),
broker.DisableAutoAck(),
rabbitmq.DurableQueue(),
)
// Register a subscriber
err := micro.RegisterSubscriber(
"direct.exchange.queue",
service.Server(),
func(ctx context.Context, evt *TestEvent) error {
logger.Logf(logger.InfoLevel, "receive event: %+v", evt)
return nil
},
server.SubscriberContext(brkrSub.Context),
server.SubscriberQueue("direct.exchange.queue"),
)
if err != nil {
t.Fatal(err)
}
go func() {
time.Sleep(5 * time.Second)
logger.Logf(logger.InfoLevel, "pub event")
jsonData, _ := json.Marshal(&TestEvent{
Name: "test",
Age: 16,
})
err := b.Publish("direct.exchange.queue", &broker.Message{
Body: jsonData,
},
rabbitmq.DeliveryMode(2),
rabbitmq.ContentType("application/json"))
if err != nil {
t.Fatal(err)
}
}()
// service.Init()
if err := service.Run(); err != nil {
t.Fatal(err)
}
}
func TestTopicExchange(t *testing.T) {
b := rabbitmq.NewBroker()
b.Init()
if err := b.Connect(); err != nil {
t.Logf("cant conect to broker, skip: %v", err)
t.Skip()
}
s := server.NewServer(server.Broker(b))
service := micro.NewService(
micro.Server(s),
micro.Broker(b),
)
brkrSub := broker.NewSubscribeOptions(
broker.Queue("topic.exchange.queue"),
broker.DisableAutoAck(),
rabbitmq.DurableQueue(),
)
// Register a subscriber
err := micro.RegisterSubscriber(
"my-test-topic",
service.Server(),
func(ctx context.Context, evt *TestEvent) error {
logger.Logf(logger.InfoLevel, "receive event: %+v", evt)
return nil
},
server.SubscriberContext(brkrSub.Context),
server.SubscriberQueue("topic.exchange.queue"),
)
if err != nil {
t.Fatal(err)
}
go func() {
time.Sleep(5 * time.Second)
logger.Logf(logger.InfoLevel, "pub event")
jsonData, _ := json.Marshal(&TestEvent{
Name: "test",
Age: 16,
})
err := b.Publish("my-test-topic", &broker.Message{
Body: jsonData,
},
rabbitmq.DeliveryMode(2),
rabbitmq.ContentType("application/json"))
if err != nil {
t.Fatal(err)
}
}()
// service.Init()
if err := service.Run(); err != nil {
t.Fatal(err)
}
}