Implement notifications service with shared messaging and email drivers (#36)
This commit is contained in:
1 parent
36277b6c45
commit
5c2d36281b
54 files changed
+3746
-6
No files matched your search
@@ -0,0 +1,49 @@
|
||||
// Package runtime composes the locally owned Sendico durable messaging adapters.
|
||||
// SXCHNGE does not include Sendico's discovery or business-event registries.
|
||||
package runtime
|
||||
|
||||
import (
|
||||
merrors "git.sendico.io/tech/sxchnge/shared/errors"
|
||||
mlogger "git.sendico.io/tech/sxchnge/shared/logging"
|
||||
msg "git.sendico.io/tech/sxchnge/shared/messaging"
|
||||
"git.sendico.io/tech/sxchnge/shared/messaging/internal/natsb"
|
||||
config "git.sendico.io/tech/sxchnge/shared/messaging/internal/natsb/config"
|
||||
"git.sendico.io/tech/sxchnge/shared/messaging/internal/natscap"
|
||||
"git.sendico.io/tech/sxchnge/shared/messaging/reliable"
|
||||
"github.com/go-viper/mapstructure/v2"
|
||||
)
|
||||
|
||||
type Runtime struct {
|
||||
Durable reliable.Transport
|
||||
DurableAdmin reliable.Admin
|
||||
broker *natsb.NatsBroker
|
||||
}
|
||||
|
||||
func New(logger mlogger.Logger, c *msg.Config) (*Runtime, error) {
|
||||
if c == nil || c.Driver != msg.BBNats {
|
||||
return nil, merrors.InvalidArgument("NATS messaging configuration required")
|
||||
}
|
||||
var settings config.Settings
|
||||
decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{Result: &settings, ErrorUnused: true, TagName: "mapstructure"})
|
||||
if err != nil {
|
||||
return nil, merrors.InternalWrap(err, "create messaging settings decoder")
|
||||
}
|
||||
if err = decoder.Decode(c.Settings); err != nil {
|
||||
return nil, merrors.InvalidArgument("invalid messaging settings")
|
||||
}
|
||||
broker, err := natsb.NewNatsBroker(mlogger.Named(logger, "messaging"), &settings)
|
||||
if err != nil {
|
||||
return nil, merrors.OpaqueWrap(merrors.ErrServiceUnavailable, err, "connect messaging broker")
|
||||
}
|
||||
adapter := natscap.NewDurableAdapter(broker)
|
||||
if adapter == nil {
|
||||
broker.Close()
|
||||
return nil, merrors.FailedPrecondition("durable messaging unavailable")
|
||||
}
|
||||
return &Runtime{Durable: adapter, DurableAdmin: adapter, broker: broker}, nil
|
||||
}
|
||||
func (r *Runtime) Close() {
|
||||
if r != nil {
|
||||
r.broker.Close()
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user