Size: a a a

2021 May 31

@

@mr_tron in Go-go!
Рэбит работает по TCP и гоняет пинги внутри соединения. Либо ack дойдёт либо следующий ping не пройдёт и соединение умрёт
источник

@

@mr_tron in Go-go!
Но да - может быть такое что задание выполнится дважды
источник

AT

Aleksei Tolok in Go-go!
у rabbitmq есть heartbeat. как только сервер видит, что в коннекте нет жизни, он тут же вернет таски, отданные этому консьюмеру, в unack
источник

ЯК

Ярослав Коробейников... in Go-go!
Ну в целом для теоретического примера мне не очень важен exactly one delivery, я на уровне уже полученного   сообщения могу проверить нет ли в бд допустим записей полученных из этого месседжа и тд...

Меня волнует сколько времени может продлиться этот простой, когда воркер не упал, но и не сумел сказать что он не смог обработать сообщение и передайте это сообщение другому воркеру пожалуйста
источник

@

@mr_tron in Go-go!
Мало продлится
источник

ЯК

Ярослав Коробейников... in Go-go!
Почему?) ведь воркер физически жив, просто вот именно NACK не прошёл по какой-то сетевой задержке допустим и тд?
источник

@

@mr_tron in Go-go!
Потому что это TCP с гарантированной упорядоченной доставкой. В котором регулярно бегают хартбит запросы. Если хартбита нет, то воркер считается мертвым. А не может ак потеряться а хартбит прийти (потому что смотри предложение 1)
источник

ЯК

Ярослав Коробейников... in Go-go!
В луп меня звёл) Спасибо)
источник

ЯК

Ярослав Коробейников... in Go-go!
Просто опыта с реббитом пока не много, поэтому есть в голове вопросы, особенно судя по примерам из go туториала на сайте реббита

Просто мне интересно.... Ещё) А как тогда воркер узнает что он мёртв
В примерах же как
Открыли коннекшн
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")

Получили канал
ch, err := conn.Channel()


Если на этих стадиях ошибок не было, всё, консьм месседжы в бесконечном цикле
msgs, err := ch.Consume(...)
for d := range msgs {
  // Handle it
}


И вот пока он получает сообещния, соединение вдруг рвётся? Я чё-т не пойму где ошибка при этом должна возникнуть если тут у нас сообщения как я понимаю просто перестают получаться? Или он автоматом под капотом будет пробовать реконект пока не получиться?
источник

DS

Dmitry Soloma in Go-go!
Там есть подписка на канал, в случае разрыва конекшона выбрасывается ошибка
источник

СС

Семён Семеныч... in Go-go!
https://play.golang.org/p/EjXsmZhbWET

Уже который час не могу разобраться с выводом JSON.
Хочу вывести из JSON additional_make_multi_list а выводятся нули.
источник

ЯК

Ярослав Коробейников... in Go-go!
Блин, я думал там это всё под капотом пока не наткнулся на https://stackoverflow.com/questions/41991926/how-to-detect-dead-rabbitmq-connection ;DDDD
источник

С

Сергей in Go-go!
Ваш JSON в jsonString не соответствует структуре. В частности:
{
           "1": {
               "id": 57,
               "min": 128,
               "max": 189,
               "chance": 100
           }
       },

не ложится на Droplist
источник

AK

Andrey Kartashov in Go-go!
источник

G

Geo in Go-go!
Добрый день! Пытаюсь прописать в куки refresh_token, для этого написал функцию

func setRefreshToken(res *fasthttp.Response, refreshToken string) {
 authCookie := &fasthttp.Cookie{}
 authCookie.SetKey("refresh_token")
 authCookie.SetValue(refreshToken)
 authCookie.SetMaxAge(36000)
 authCookie.SetPath("/api/v1/authentication")
 authCookie.SetHTTPOnly(true)
 authCookie.SetSameSite(fasthttp.CookieSameSiteLaxMode)
 res.Header.SetCookie(authCookie)
}

Но если сразу после SetCookie попытаться вывести значение куки,
fmt.Println(string(res.Header.PeekCookie("refresh_cookie"))) то выводится пустая строка

Так же если сразу с фронта отправить запрос на бек то req.Header.Cookie("refresh_token") так же возращает пустой массив

Можете сказать где я туплю?
источник

DS

Dmitry Soloma in Go-go!
authCookie.SetKey("refresh_token")

а вызываете res.Header.PeekCookie("refresh_cookie")
источник

U

Unat in Go-go!
Господа, а насколько порочным будет использовать структуру с функциональными свойствами-методами вместо структуры с методами?
type Foo struct {
   Bar func() error
}

type Foo struct {
}

func (f Foo) Bar() error {
   return nil
}
источник

DS

Dmitry Soloma in Go-go!
и тот и другой вариант сделали для того что бы использовать. Что вас смущает?
источник

AS

Andrei 🦉 Sergeev in Go-go!
в первом случае это просто функция, у вас не будет ресивера на экземпляр структуры
источник

DP

Daniel Podolsky in Go-go!
а зачем это может быть надо?
источник