1
0
mirror of https://github.com/ManyakRus/starter.git synced 2025-11-24 22:53:52 +02:00
Files
starter/nats_connect/nats_connect.go

157 lines
3.6 KiB
Go
Raw Normal View History

2023-03-17 11:20:09 +03:00
package nats_connect
import (
2023-06-01 18:02:36 +03:00
"context"
2023-05-02 09:51:50 +03:00
"github.com/ManyakRus/starter/logger"
2023-06-01 18:02:36 +03:00
"github.com/ManyakRus/starter/micro"
2023-12-26 16:42:53 +03:00
"github.com/ManyakRus/starter/port_checker"
2023-11-14 13:39:20 +03:00
"github.com/nats-io/nats.go"
2023-03-17 11:20:09 +03:00
"os"
2023-05-02 09:51:50 +03:00
//"github.com/ManyakRus/starter/common/v0/micro"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/stopapp"
2023-03-17 11:20:09 +03:00
)
// Conn - соединение к серверу nats
var Conn *nats.Conn
// log - глобальный логгер
var log = logger.GetLog()
// Settings хранит все нужные переменные окружения
var Settings SettingsINI
// SettingsINI - структура для хранения всех нужных переменных окружения
type SettingsINI struct {
NATS_HOST string
NATS_PORT string
NATS_LOGIN string
NATS_PASSWORD string
}
// Connect - подключается к серверу Nats
func Connect() {
var err error
err = Connect_err()
if err != nil {
log.Panicln("NATS Connect() error: ", err)
} else {
log.Info("NATS Connect() ok ")
}
}
// Connect_err - подключается к серверу Nats и возвращает ошибку
func Connect_err() error {
var err error
if Settings.NATS_HOST == "" {
FillSettings()
}
2023-12-26 16:42:53 +03:00
port_checker.CheckPort(Settings.NATS_HOST, Settings.NATS_PORT)
2023-03-17 11:20:09 +03:00
sNATS_PORT := Settings.NATS_PORT
URL := "nats://" + Settings.NATS_HOST + ":" + sNATS_PORT
UserInfo := nats.UserInfo(Settings.NATS_LOGIN, Settings.NATS_PASSWORD)
Conn, err = nats.Connect(URL, UserInfo)
//nats.ManualAck()
return err
}
// StartNats - необходимые процедуры для подключения к серверу Nats
func StartNats() {
Connect()
stopapp.GetWaitGroup_Main().Add(1)
go WaitStop()
}
// CloseConnection - закрывает соединение с сервером Nats
func CloseConnection() {
//var err error
if Conn == nil {
return
}
Conn.Close()
log.Info("NATS stopped")
return
}
2023-06-06 18:05:30 +03:00
// WaitStop - ожидает отмену глобального контекста
2023-03-17 11:20:09 +03:00
func WaitStop() {
select {
case <-contextmain.GetContext().Done():
log.Warn("Context app is canceled. NATS_Connect.")
}
CloseConnection()
stopapp.GetWaitGroup_Main().Done()
}
// FillSettings загружает переменные окружения в структуру из файла или из переменных окружения
func FillSettings() {
Settings = SettingsINI{}
Settings.NATS_HOST = os.Getenv("NATS_HOST")
Settings.NATS_PORT = os.Getenv("NATS_PORT")
Settings.NATS_LOGIN = os.Getenv("NATS_LOGIN")
Settings.NATS_PASSWORD = os.Getenv("NATS_PASSWORD")
2023-11-10 13:01:08 +03:00
// как у всех
2023-03-17 11:20:09 +03:00
if Settings.NATS_HOST == "" {
2023-11-10 13:01:08 +03:00
Settings.NATS_HOST = os.Getenv("BUS_LOCAL_HOST")
2023-03-17 11:20:09 +03:00
}
if Settings.NATS_PORT == "" {
2023-11-10 13:01:08 +03:00
Settings.NATS_PORT = os.Getenv("BUS_LOCAL_PORT")
}
if Settings.NATS_HOST == "" {
log.Error("Need fill NATS_HOST ! in os.ENV ")
}
//
if Settings.NATS_PORT == "" {
log.Error("Need fill NATS_PORT ! in os.ENV ")
2023-03-17 11:20:09 +03:00
}
//if Settings.NATS_LOGIN == "" {
// log.Panicln("Need fill NATS_LOGIN ! in os.ENV ")
//}
//
//if Settings.NATS_PASSWORD == "" {
// log.Panicln("Need fill NATS_PASSWORD ! in os.ENV ")
//}
//
}
2023-06-01 18:02:36 +03:00
// SendMessageCtx - Отправляет сообщение, учитывает таймаут контекста
func SendMessageCtx(ctx context.Context, subject string, data []byte) error {
var err error
fn := func() error {
err = SendMessage(subject, data)
return err
}
err = micro.GoGo(ctx, fn)
return err
}
// SendMessage - Отправляет сообщение
func SendMessage(subject string, data []byte) error {
var err error
err = Conn.Publish(subject, data)
return err
}