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