1
0
mirror of https://github.com/ManyakRus/starter.git synced 2025-11-23 22:45:11 +02:00
Files
starter/sync_exchange_connect/sync_exchange_connect.go
2024-09-27 15:04:30 +03:00

101 lines
2.9 KiB
Go

// модуль для обмена с сервисом NATS через sync_exchange
package sync_exchange_connect
import (
"context"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/log"
"github.com/ManyakRus/starter/nats_connect"
"github.com/ManyakRus/starter/stopapp"
"gitlab.aescorp.ru/dsp_dev/claim/common/sync_exchange"
"gitlab.aescorp.ru/dsp_dev/claim/common/sync_exchange/sync_types"
"sync"
)
// Connect - подключение к NATS SyncExchange
func Connect(ServiceName string) {
var err error
nats_connect.FillSettings()
sNATS_PORT := (nats_connect.Settings.NATS_PORT)
url := "nats://" + nats_connect.Settings.NATS_HOST + ":" + sNATS_PORT
err = sync_exchange.InitSyncExchange(url, ServiceName)
if err != nil {
log.Panicln("Can not start NATS, server: ", nats_connect.Settings.NATS_HOST, " error: ", err)
}
//return err
}
// Start - необходимые процедуры для подключения к серверу Nats SyncExchange
func Start(ServiceName string) {
//var err error
Connect(ServiceName)
stopapp.GetWaitGroup_Main().Add(1)
go WaitStop()
}
// Start_ctx - необходимые процедуры для подключения к NATS с библиотекой SyncExchange
// Свой контекст и WaitGroup нужны для остановки работы сервиса Graceful shutdown
// Для тех кто пользуется этим репозиторием для старта и останова сервиса можно просто Start()
func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup, ServiceName string) error {
var err error
//запомним к себе контекст и WaitGroup
contextmain.Ctx = ctx
stopapp.SetWaitGroup_Main(WaitGroup)
//
Start(ServiceName)
return err
}
// CloseConnection - закрывает соединение с NATS
func CloseConnection() {
err := sync_exchange.DeInitSyncExchange()
if err != nil {
log.Error("CloseConnection() error: ", err)
} else {
log.Info("NATS stopped")
}
//return err
}
// WaitStop - ожидает отмену глобального контекста или сигнала завершения приложения
func WaitStop() {
select {
case <-contextmain.GetContext().Done():
log.Warn("Context app is canceled. NATS.")
}
//ждём пока отправляемых сейчас сообщений будет =0
stopapp.WaitTotalMessagesSendingNow("nats SyncExchange")
//закрываем соединение
CloseConnection()
stopapp.GetWaitGroup_Main().Done()
}
// SendResponseError - Отправляет ответ в NATS SyncExchange
func SendResponseError(sp *sync_types.SyncPackage, err error) {
if err == nil {
return
}
sp_otvet := sync_types.MakeSyncError("", 0, err.Error())
err = sync_exchange.SendResponse(sp, sp_otvet)
if err != nil {
log.Error("SendResponse() Error: ", err)
}
}