mirror of
https://github.com/go-micro/go-micro.git
synced 2025-06-30 22:33:49 +02:00
* 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
306 lines
6.3 KiB
Go
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)
|
|
}
|
|
}
|