88 lines
1.9 KiB
Go
88 lines
1.9 KiB
Go
package rabbitmq_amqp
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"github.com/Azure/go-amqp"
|
|
)
|
|
|
|
type AmqpExchangeInfo struct {
|
|
name string
|
|
}
|
|
|
|
func newAmqpExchangeInfo(name string) *AmqpExchangeInfo {
|
|
return &AmqpExchangeInfo{name: name}
|
|
}
|
|
|
|
func (a *AmqpExchangeInfo) Name() string {
|
|
return a.name
|
|
}
|
|
|
|
type AmqpExchange struct {
|
|
name string
|
|
management *AmqpManagement
|
|
arguments map[string]any
|
|
isAutoDelete bool
|
|
exchangeType ExchangeType
|
|
}
|
|
|
|
func newAmqpExchange(management *AmqpManagement, name string) *AmqpExchange {
|
|
return &AmqpExchange{management: management,
|
|
name: name,
|
|
arguments: make(map[string]any),
|
|
exchangeType: ExchangeType{Type: Direct},
|
|
}
|
|
}
|
|
|
|
func (e *AmqpExchange) Declare(ctx context.Context) (*AmqpExchangeInfo, error) {
|
|
if len(e.name) == 0 {
|
|
return nil, errors.New("exchange name cannot be empty")
|
|
}
|
|
|
|
path, err := exchangeAddress(&e.name, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
kv := make(map[string]any)
|
|
kv["auto_delete"] = e.isAutoDelete
|
|
kv["durable"] = true
|
|
kv["type"] = e.exchangeType.String()
|
|
kv["arguments"] = e.arguments
|
|
_, err = e.management.Request(ctx, kv, path, commandPut, []int{responseCode204, responseCode201, responseCode409})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return newAmqpExchangeInfo(e.name), nil
|
|
}
|
|
|
|
func (e *AmqpExchange) AutoDelete(isAutoDelete bool) {
|
|
e.isAutoDelete = isAutoDelete
|
|
}
|
|
|
|
func (e *AmqpExchange) IsAutoDelete() bool {
|
|
return e.isAutoDelete
|
|
}
|
|
|
|
func (e *AmqpExchange) Delete(ctx context.Context) error {
|
|
path, err := exchangeAddress(&e.name, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = e.management.Request(ctx, amqp.Null{}, path, commandDelete, []int{responseCode204})
|
|
return err
|
|
}
|
|
|
|
func (e *AmqpExchange) ExchangeType(exchangeType ExchangeType) {
|
|
if len(exchangeType.Type) > 0 {
|
|
e.exchangeType = exchangeType
|
|
}
|
|
}
|
|
|
|
func (e *AmqpExchange) GetExchangeType() TExchangeType {
|
|
return e.exchangeType.Type
|
|
}
|
|
|
|
func (e *AmqpExchange) Name() string {
|
|
return e.name
|
|
}
|