From 26c8aca28d3501d761de167f17875165975ab01c Mon Sep 17 00:00:00 2001 From: Nikitin Aleksandr Date: Tue, 23 Jan 2024 11:34:56 +0300 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20Start=5F?= =?UTF-8?q?ctx()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network/grpc/grpc_client/grpc_client.go_ | 58 ++++++++++++++++--- .../network/nrpc/nrpc_client/nrpc_client.go_ | 42 +++++++++++++- .../pkg/object_model/entities/model_crud.go_ | 2 +- 3 files changed, 90 insertions(+), 12 deletions(-) diff --git a/bin/templates/pkg/network/grpc/grpc_client/grpc_client.go_ b/bin/templates/pkg/network/grpc/grpc_client/grpc_client.go_ index ceb8435..4841eca 100644 --- a/bin/templates/pkg/network/grpc/grpc_client/grpc_client.go_ +++ b/bin/templates/pkg/network/grpc/grpc_client/grpc_client.go_ @@ -1,6 +1,7 @@ package grpc_client import ( + "context" "github.com/ManyakRus/starter/contextmain" "github.com/ManyakRus/starter/log" "github.com/ManyakRus/starter/port_checker" @@ -15,15 +16,19 @@ import ( "time" ) +// SettingsINI - тип структуры для хранения настроек подключени type SettingsINI struct { SYNC_SERVICE_HOST string SYNC_SERVICE_PORT string } +// SettingsINI - структура для хранения настроек подключени var Settings SettingsINI +// Conn - подключение к серверу GRPC var Conn *grpc.ClientConn +// Client - подключение к клиенту GRPC var Client grpc_proto.SyncServiceClient // mutexReconnect - защита от многопоточности Reconnect() @@ -32,22 +37,34 @@ var mutexReconnect = &sync.Mutex{} // NeedReconnect - флаг необходимости переподключения var NeedReconnect bool +// Connect - подключается к серверу GRPC, при ошибке вызывает панику func Connect() { var err error + err = Connect_err() + + if err != nil { + log.Fatalf("GRPC Connect() error: %v", err) + } else { + addr := Settings.SYNC_SERVICE_HOST + ":" + Settings.SYNC_SERVICE_PORT + log.Info("GRPC client connected. Address: ", addr) + } + +} + +// Connect_err - подключается к серверу GRPC, возвращает ошибку +func Connect_err() error { + var err error + if Settings.SYNC_SERVICE_HOST == "" { FillSettings() } addr := Settings.SYNC_SERVICE_HOST + ":" + Settings.SYNC_SERVICE_PORT Conn, err = grpc.Dial(addr, grpc.WithTransportCredentials(insecure.NewCredentials())) - if err != nil { - log.Fatalf("did not connect: %v", err) - } - - log.Info("GRPC client connected. Address: ", addr) Client = grpc_proto.NewSyncServiceClient(Conn) + return err } func FillSettings() { @@ -81,7 +98,21 @@ func WaitStop() { } // Start - необходимые процедуры для запуска сервера GRPC +// если контекст хранится в contextmain.GetContext() func Start() { + contextmain.GetContext() + ctx := contextmain.Ctx + wg := stopapp.GetWaitGroup_Main() + Start_ctx(ctx, wg) +} + +// Start_ctx - необходимые процедуры для запуска сервера GRPC +// ctx - глобальный контекст приложения +// wg - глобальный WaitGroup приложения +func Start_ctx(ctx *context.Context, wg *sync.WaitGroup) { + contextmain.Ctx = ctx + stopapp.SetWaitGroup_Main(wg) + Connect() stopapp.GetWaitGroup_Main().Add(1) @@ -92,15 +123,22 @@ func Start() { } +// CloseConnection - закрывает подключение к GRPC, и пишет лог func CloseConnection() { - err := Conn.Close() + err := CloseConnection_err() if err != nil { - log.Panic("GRPC client CloseConnection() error: ", err) + log.Error("GRPC client CloseConnection() error: ", err) } else { log.Info("GRPC client connection closed") } } +// CloseConnection - закрывает подключение к GRPC, и возвращает ошибку +func CloseConnection_err() error { + err := Conn.Close() + return err +} + // IsRecordNotFound - возвращает true если ошибка = "record not found" func IsRecordNotFound(err error) bool { Otvet := false @@ -142,7 +180,11 @@ loop: } else if NeedReconnect == true { log.Warn("grpc_client CheckPort(", addr, ") OK. Start Reconnect()") NeedReconnect = false - Connect() + err = Connect_err() + if err != nil { + NeedReconnect = true + log.Error("grpc_client Connect() error: ", err) + } } } } diff --git a/bin/templates/pkg/network/nrpc/nrpc_client/nrpc_client.go_ b/bin/templates/pkg/network/nrpc/nrpc_client/nrpc_client.go_ index 7097174..9316696 100644 --- a/bin/templates/pkg/network/nrpc/nrpc_client/nrpc_client.go_ +++ b/bin/templates/pkg/network/nrpc/nrpc_client/nrpc_client.go_ @@ -4,6 +4,7 @@ package nrpc_client import ( + "context" "github.com/ManyakRus/starter/contextmain" "github.com/ManyakRus/starter/log" "github.com/ManyakRus/starter/port_checker" @@ -18,11 +19,13 @@ import ( "time" ) +// SettingsINI - тип структуры для хранения настроек подключени type SettingsINI struct { NATS_HOST string NATS_PORT string } +// SettingsINI - структура для хранения настроек подключени var Settings SettingsINI // Conn - подключение к NATS @@ -37,10 +40,25 @@ var mutexReconnect = &sync.Mutex{} // NeedReconnect - флаг необходимости переподключения var NeedReconnect bool -// Connect - подключается к NATS +// Connect - подключается к серверу NRPC, при ошибке вызывает панику func Connect() { var err error + err = Connect_err() + + if err != nil { + log.Fatalf("NRPC Connect() error: %v", err) + } else { + NatsURL := "nats://" + Settings.NATS_HOST + ":" + Settings.NATS_PORT + log.Info("GRPC client connected. Address: ", NatsURL) + } + +} + +// Connect_err - подключается к серверу NRPC, возвращает ошибку +func Connect_err() error { + var err error + if Settings.NATS_HOST == "" { FillSettings() } @@ -56,7 +74,7 @@ func Connect() { // This is our generated client. Client = grpc_proto.NewSync_serviceClient(Conn) - log.Info("Client NRPC connected: ", NatsURL) + return err } // FillSettings - заполняет настройки из переменных окружения @@ -100,7 +118,21 @@ func WaitStop() { } // Start - необходимые процедуры для запуска сервера NRPC +// если контекст хранится в contextmain.GetContext() func Start() { + contextmain.GetContext() + ctx := contextmain.Ctx + wg := stopapp.GetWaitGroup_Main() + Start_ctx(ctx, wg) +} + +// Start_ctx - необходимые процедуры для запуска сервера NRPC +// ctx - глобальный контекст приложения +// wg - глобальный WaitGroup приложения +func Start_ctx(ctx *context.Context, wg *sync.WaitGroup) { + contextmain.Ctx = ctx + stopapp.SetWaitGroup_Main(wg) + Connect() stopapp.GetWaitGroup_Main().Add(1) @@ -160,7 +192,11 @@ loop: } else if NeedReconnect == true { log.Warn("nrpc_client CheckPort(", addr, ") OK. Start Reconnect()") NeedReconnect = false - Connect() + err = Connect_err() + if err != nil { + NeedReconnect = true + log.Error("nrpc_client Connect() error: ", err) + } } } } diff --git a/bin/templates/pkg/object_model/entities/model_crud.go_ b/bin/templates/pkg/object_model/entities/model_crud.go_ index d00a2b5..a12695f 100644 --- a/bin/templates/pkg/object_model/entities/model_crud.go_ +++ b/bin/templates/pkg/object_model/entities/model_crud.go_ @@ -25,7 +25,7 @@ type ICrud_LawsuitStatusType interface { Find_ByExtID(*LawsuitStatusType) error } -// TableName - возвращает имя таблицы в БД, нужен для gorm +// TableName - возвращает имя таблицы в БД func (m LawsuitStatusType) TableNameDB() string { return "lawsuit_status_types" }