Files
sendico/api/payments/quotation/internal/server/internal/discovery.go

86 lines
2.2 KiB
Go

package serverimp
import (
"strings"
"github.com/tech/sendico/payments/quotation/internal/appversion"
"github.com/tech/sendico/pkg/discovery"
msg "github.com/tech/sendico/pkg/messaging"
"go.uber.org/zap"
)
const quotationDiscoverySender = "payment_quotation"
func (i *Imp) initDiscovery(cfg *config) {
if i == nil || cfg == nil || cfg.Messaging == nil || cfg.Messaging.Driver == "" {
return
}
logger := i.logger.Named("discovery")
broker, err := msg.CreateMessagingBroker(logger.Named("bus"), cfg.Messaging)
if err != nil {
i.logger.Warn("Failed to initialise discovery broker", zap.Error(err))
return
}
registry := discovery.NewRegistry()
watcher, err := discovery.NewRegistryWatcher(logger, broker, registry)
if err != nil {
i.logger.Warn("Failed to initialise discovery registry watcher", zap.Error(err))
return
}
if err := watcher.Start(); err != nil {
i.logger.Warn("Failed to start discovery registry watcher", zap.Error(err))
return
}
i.discoveryWatcher = watcher
i.discoveryReg = registry
i.logger.Info("Discovery registry watcher started")
}
func (i *Imp) startDiscoveryAnnouncer(cfg *config, producer msg.Producer) {
if i == nil || cfg == nil || producer == nil || cfg.GRPC == nil {
return
}
invokeURI := strings.TrimSpace(cfg.GRPC.DiscoveryInvokeURI())
if invokeURI == "" {
i.logger.Warn("Skipping discovery announcement: missing advertise host/port in gRPC config")
return
}
announce := discovery.Announcement{
Service: "PAYMENTS_QUOTATION",
Operations: []string{"payment.quote", "payment.multiquote"},
InvokeURI: invokeURI,
Version: appversion.Create().Short(),
}
i.discoveryAnnouncer = discovery.NewAnnouncer(i.logger, producer, quotationDiscoverySender, announce)
i.discoveryAnnouncer.Start()
i.logger.Info("Discovery announcer started",
zap.String("service", announce.Service),
zap.String("invoke_uri", announce.InvokeURI))
}
func (i *Imp) stopDiscoveryAnnouncer() {
if i == nil || i.discoveryAnnouncer == nil {
return
}
i.discoveryAnnouncer.Stop()
i.discoveryAnnouncer = nil
}
func (i *Imp) stopDiscovery() {
if i == nil {
return
}
i.stopDiscoveryAnnouncer()
if i.discoveryWatcher != nil {
i.discoveryWatcher.Stop()
i.discoveryWatcher = nil
}
i.discoveryReg = nil
}