1
0
mirror of https://github.com/ManyakRus/starter.git synced 2025-11-25 23:02:22 +02:00
Files
starter/sync_exchange_connect/sync_exchange_connect.go

128 lines
3.6 KiB
Go
Raw Normal View History

2023-11-14 13:39:20 +03:00
// модуль для обмена с сервисом NATS через sync_exchange
package sync_exchange_connect
import (
2024-09-27 15:04:30 +03:00
"context"
2023-11-14 13:39:20 +03:00
"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"
2024-09-27 15:04:30 +03:00
"sync"
2023-11-14 13:39:20 +03:00
)
// Connect - подключение к NATS SyncExchange
func Connect(ServiceName string) {
2024-09-27 15:36:29 +03:00
err := Connect_err(ServiceName)
2024-09-27 16:32:56 +03:00
LogInfo_Connected(err)
}
// LogInfo_Connected - выводит сообщение в Лог, или паника при ошибке
func LogInfo_Connected(err error) {
2024-09-27 15:36:29 +03:00
if err != nil {
log.Panicln("Can not start NATS, server: ", nats_connect.Settings.NATS_HOST, " error: ", err)
} else {
2024-10-22 12:34:19 +03:00
log.Info("NATS connected. OK., server: ", nats_connect.Settings.NATS_HOST, ":", nats_connect.Settings.NATS_PORT)
2024-09-27 15:36:29 +03:00
}
2024-09-27 16:32:56 +03:00
2024-09-27 15:36:29 +03:00
}
// Connect_err - подключение к NATS SyncExchange
func Connect_err(ServiceName string) error {
2023-11-14 13:39:20 +03:00
var err error
nats_connect.FillSettings()
sNATS_PORT := (nats_connect.Settings.NATS_PORT)
url := "nats://" + nats_connect.Settings.NATS_HOST + ":" + sNATS_PORT
2024-09-27 15:36:29 +03:00
err = sync_exchange.InitSyncExchange(url, ServiceName, "")
2023-11-14 13:39:20 +03:00
2024-09-27 15:36:29 +03:00
return err
2023-11-14 13:39:20 +03:00
}
2023-11-14 13:40:42 +03:00
// Start - необходимые процедуры для подключения к серверу Nats SyncExchange
func Start(ServiceName string) {
2024-09-27 16:32:56 +03:00
var err error
2023-11-14 13:39:20 +03:00
2024-09-27 16:32:56 +03:00
ctx := contextmain.GetContext()
WaitGroup := stopapp.GetWaitGroup_Main()
err = Start_ctx(&ctx, WaitGroup, ServiceName)
LogInfo_Connected(err)
2023-11-14 13:39:20 +03:00
}
2024-09-27 15:04:30 +03:00
// Start_ctx - необходимые процедуры для подключения к NATS с библиотекой SyncExchange
// Свой контекст и WaitGroup нужны для остановки работы сервиса Graceful shutdown
// Для тех кто пользуется этим репозиторием для старта и останова сервиса можно просто Start()
func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup, ServiceName string) error {
var err error
2024-09-30 12:05:31 +03:00
//запомним к себе контекст
2024-09-27 15:04:30 +03:00
contextmain.Ctx = ctx
2024-09-30 12:05:31 +03:00
if ctx == nil {
contextmain.GetContext()
}
//запомним к себе WaitGroup
2024-09-27 15:04:30 +03:00
stopapp.SetWaitGroup_Main(WaitGroup)
2024-09-30 12:05:31 +03:00
if WaitGroup == nil {
stopapp.StartWaitStop()
}
2024-09-27 15:04:30 +03:00
//
2024-09-27 15:36:29 +03:00
err = Connect_err(ServiceName)
if err != nil {
return err
}
stopapp.GetWaitGroup_Main().Add(1)
go WaitStop()
2024-09-27 15:04:30 +03:00
return err
}
2023-11-14 13:39:20 +03:00
// 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)
}
}