diff --git a/pkg/rabbitmqamqp/amqp_exchange.go b/pkg/rabbitmqamqp/amqp_exchange.go index 5714a03..36c25af 100644 --- a/pkg/rabbitmqamqp/amqp_exchange.go +++ b/pkg/rabbitmqamqp/amqp_exchange.go @@ -47,7 +47,9 @@ func (e *AmqpExchange) Declare(ctx context.Context) (*AmqpExchangeInfo, error) { kv["auto_delete"] = e.isAutoDelete kv["durable"] = true kv["type"] = e.exchangeType.String() - kv["arguments"] = e.arguments + if e.arguments != nil { + kv["arguments"] = e.arguments + } _, err = e.management.Request(ctx, kv, path, commandPut, []int{responseCode204, responseCode201, responseCode409}) if err != nil { return nil, err diff --git a/pkg/rabbitmqamqp/amqp_exchange_test.go b/pkg/rabbitmqamqp/amqp_exchange_test.go index 6548ee2..db348dc 100644 --- a/pkg/rabbitmqamqp/amqp_exchange_test.go +++ b/pkg/rabbitmqamqp/amqp_exchange_test.go @@ -49,6 +49,9 @@ var _ = Describe("AMQP Exchange test ", func() { const exchangeName = "AMQP Exchange Declare with FanOut and Delete should succeed" exchangeInfo, err := management.DeclareExchange(context.TODO(), &FanOutExchangeSpecification{ Name: exchangeName, + Arguments: map[string]any{ + "x-foo": "bar", + }, }) Expect(err).To(BeNil()) Expect(exchangeInfo).NotTo(BeNil()) @@ -63,6 +66,9 @@ var _ = Describe("AMQP Exchange test ", func() { exchangeInfo, err := management.DeclareExchange(context.TODO(), &CustomExchangeSpecification{ Name: exchangeName, ExchangeTypeName: "x-local-random", + Arguments: map[string]any{ + "x-delayed-type": "direct", + }, }) Expect(err).To(BeNil()) Expect(exchangeInfo).NotTo(BeNil()) diff --git a/pkg/rabbitmqamqp/entities.go b/pkg/rabbitmqamqp/entities.go index 6af76b6..e3f4471 100644 --- a/pkg/rabbitmqamqp/entities.go +++ b/pkg/rabbitmqamqp/entities.go @@ -349,12 +349,13 @@ type ExchangeSpecification interface { name() string isAutoDelete() bool exchangeType() ExchangeType - buildArguments() map[string]any + arguments() map[string]any } type DirectExchangeSpecification struct { Name string IsAutoDelete bool + Arguments map[string]any } func (d *DirectExchangeSpecification) name() string { @@ -369,13 +370,14 @@ func (d *DirectExchangeSpecification) exchangeType() ExchangeType { return ExchangeType{Type: Direct} } -func (d *DirectExchangeSpecification) buildArguments() map[string]any { - return map[string]any{} +func (d *DirectExchangeSpecification) arguments() map[string]any { + return d.Arguments } type TopicExchangeSpecification struct { Name string IsAutoDelete bool + Arguments map[string]any } func (t *TopicExchangeSpecification) name() string { @@ -390,13 +392,14 @@ func (t *TopicExchangeSpecification) exchangeType() ExchangeType { return ExchangeType{Type: Topic} } -func (t *TopicExchangeSpecification) buildArguments() map[string]any { - return map[string]any{} +func (t *TopicExchangeSpecification) arguments() map[string]any { + return t.Arguments } type FanOutExchangeSpecification struct { Name string IsAutoDelete bool + Arguments map[string]any } func (f *FanOutExchangeSpecification) name() string { @@ -411,13 +414,14 @@ func (f *FanOutExchangeSpecification) exchangeType() ExchangeType { return ExchangeType{Type: FanOut} } -func (f *FanOutExchangeSpecification) buildArguments() map[string]any { - return map[string]any{} +func (f *FanOutExchangeSpecification) arguments() map[string]any { + return f.Arguments } type HeadersExchangeSpecification struct { Name string IsAutoDelete bool + Arguments map[string]any } func (h *HeadersExchangeSpecification) name() string { @@ -432,14 +436,15 @@ func (h *HeadersExchangeSpecification) exchangeType() ExchangeType { return ExchangeType{Type: Headers} } -func (h *HeadersExchangeSpecification) buildArguments() map[string]any { - return map[string]any{} +func (h *HeadersExchangeSpecification) arguments() map[string]any { + return h.Arguments } type CustomExchangeSpecification struct { Name string IsAutoDelete bool ExchangeTypeName string + Arguments map[string]any } func (c *CustomExchangeSpecification) name() string { @@ -454,8 +459,8 @@ func (c *CustomExchangeSpecification) exchangeType() ExchangeType { return ExchangeType{Type: TExchangeType(c.ExchangeTypeName)} } -func (c *CustomExchangeSpecification) buildArguments() map[string]any { - return map[string]any{} +func (c *CustomExchangeSpecification) arguments() map[string]any { + return c.Arguments } // / **** Binding ****