v0.0.18.3 Фикс переподключения к rabbit
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
madipo2611 2025-08-17 15:49:08 +03:00
parent 15ae17189d
commit 7f48fb767f

View File

@ -3,6 +3,7 @@ package graph
import (
"context"
"fmt"
"log"
"tailly_back_v2/internal/domain"
"tailly_back_v2/proto"
"time"
@ -120,25 +121,36 @@ func (r *queryResolver) GetUserChats(ctx context.Context, userID int) ([]*domain
// MessageStream реализация подписки на новые сообщения
func (r *subscriptionResolver) MessageStream(ctx context.Context, userID int) (<-chan *domain.Message, error) {
stream, err := r.MessageClient.StreamMessages(ctx, &proto.StreamMessagesRequest{
UserId: int32(userID),
})
if err != nil {
return nil, fmt.Errorf("failed to stream messages: %w", err)
}
messageChan := make(chan *domain.Message)
go func() {
defer close(messageChan)
for {
msg, err := stream.Recv()
stream, err := r.MessageClient.StreamMessages(ctx, &proto.StreamMessagesRequest{
UserId: int32(userID),
})
if err != nil {
return
log.Printf("Failed to stream messages: %v", err)
select {
case <-ctx.Done():
return
case <-time.After(5 * time.Second): // Задержка перед повторной попыткой
continue
}
}
select {
case <-ctx.Done():
return
case messageChan <- protoMessageToDomain(msg.Message):
for {
msg, err := stream.Recv()
if err != nil {
log.Printf("Stream receive error: %v", err)
break
}
select {
case <-ctx.Done():
return
case messageChan <- protoMessageToDomain(msg.Message):
}
}
}
}()