
Vladimir
04.07.2017
13:35:38
это не такая проблема когда ты тыкаешься из нормального языка
но некоторые проблемы если ты на баше ваяешь клиента и дергаешь curl/wget
короче не надо ошибки с кодом 200 ок возвращать

Dmitry
04.07.2017
13:36:05

Google

Vladimir
04.07.2017
13:36:18
не-200ки могут иначе обрабатываться клиентами

Denis
04.07.2017
13:37:39

Vladimir
04.07.2017
13:37:42
короче если клиент ожидает что на ошибку он получит не-200 (а так обычно и бывает), а он получит "200" то это может быть очень плохо

Dmitry
04.07.2017
13:39:16

Vladimir
04.07.2017
13:39:29

nezorflame
04.07.2017
13:39:35
есть разница всегда
сперва на код смотрят
потом уже на содержимое

Vladimir
04.07.2017
13:39:44
когда у тебя ошибка приходит с "200" это блин пипец и хочется взять биту и идти убивать

nezorflame
04.07.2017
13:39:51
^this

Vladimir
04.07.2017
13:39:53
потому что это нефига не очевидное поведение

Google

Vladimir
04.07.2017
13:40:08
@slonoed давай ты так сделаешь, скажешь мне адрес, а потом не будешь удивляться сломанным рукам? :)

Dmitry
04.07.2017
13:42:43
@slonoed давай ты так сделаешь, скажешь мне адрес, а потом не будешь удивляться сломанным рукам? :)
ну ты по айпи вычисляй, как положено
я говорю, что технической разницы почти нет, что обрабатывать
только в случае когда клиент получив заголовки, увидит 500 и не будет парсить тело, чтоб не жечь траффик
+ если есть промежуточные сервисы, которые ошибку интерпретируют по разному могут создать проблему
а так всё решается документацией, если проект большой, то там весь rpc обёрнут в стопицот оберток

Vladimir
04.07.2017
13:43:18
технически
это не значит что так надо делать
@slonoed есть общепринятая семантика, что ошибка это 5xx
если ты ей не следуешь, тебя наздо бить битой
если все равно не следуешь - битой с гвоздями
все

Dmitry
04.07.2017
13:45:02
ок

Vladimir
04.07.2017
13:45:04
потому что технически клиенту конечно пофигу
но на практике человек может ожидать например исключения от библиотеки
или реально проверять статус
увидеть 200 и пойти обрабатывать данные
а там ты вот такую свинью подложил
уважай других и делай правильно

Dmitry
04.07.2017
13:45:57
ок

Alexey
04.07.2017
13:51:16
Не подскажите, можно запарсить json, не имея модели этого json?
Например, мне приходит какой-то json, я его тупо хочу запихнуть в бд.
var err error
var v []interface{}
err = json.Unmarshal(request, &v)
checkErr(err)
c := Session.DB("a").C("b")
err = c.Insert(v...)
Вот такой код падает с ошибкой(

Alexey
04.07.2017
13:52:07
В какую БД?

Google

Denis
04.07.2017
13:52:15
так пихай строкой как пришла

Alexey
04.07.2017
13:52:21

Denis
04.07.2017
13:52:35
или тебе валидировать нужно?
тогда валидатор прикрути

Alexey
04.07.2017
13:52:45
В монго...
В монго вроде нельзя пихать последовательность байт тупо.

Denis
04.07.2017
13:52:50
но это все равно будет строка
мона
[]byte
принимает же)

Alexey
04.07.2017
13:54:07
А, ну действительно, лол.
Спасибо

Denis
04.07.2017
13:55:28
но я бы все равно валидировал хотя бы на размер

Евгений
04.07.2017
14:16:58
Добрый день. Народ, кто занимался написанием и развертыванием микросервисов на го? Что можете сказать про go-micro? Для написания этих самых сервисов, не избыточен этот framework? Или лучше все с ноля делать? Со своими интерфейсами, транспортным протоколом и тд? А то встала задача распилить проект на микросервисы, присматриваюсь к реализации именно на этом языке ...

Denis
04.07.2017
14:26:56
Есть низкоуровневый go-kit, ограниченный go-grpc, и вполне себе go-micro
1 и 3 расширяется как вам нужно
Любой транспорт, любой MQ
И так далее
С 1 будет много бойлерплейта

Kirill
04.07.2017
14:28:27

Denis
04.07.2017
14:28:27
Писать с нуля тоже нет смысла

Google

Евгений
04.07.2017
14:38:27
А, если не секрет, можно узнать как возникла такая задача?
Бизнесу захотелось больше автономности, доступности, отказоустойчивости, децентролизованности, комплексного и глубокого мониторинга всех узлов системы, в общем обычная история по мере роста проекта и монолит с толстой ESB перестал вывозить, вернее удовлетворять требованиям в полной мере ... так же одной из задач и идей было посадить отдельные команды на разработку и дальнейшую поддержку сервисов, чтобы их можно было максимально легко обновлять, управлять ими, чтобы эти процессы не тормозили основное ядро. Как-то так, сумбурненько получилось конечно! И это все как раз и продиктовало переход на микросервисы и DDD.

Denis
04.07.2017
14:47:03
Классика

Kristina
04.07.2017
16:03:04
А в чем преимущество использования RPC фреймворков перед брокерами сообщений для взаимодействия микросервисов?

Michael
04.07.2017
16:07:03
сравнение бананов с апельсинами?

Phil
04.07.2017
16:07:42

Ivan
04.07.2017
16:08:07

Kristina
04.07.2017
16:09:33
Да, вроде две очереди

Ivan
04.07.2017
16:09:42

nezorflame
04.07.2017
16:10:02
видимо, вторая с ответами после обработки

redbeard
04.07.2017
16:10:06
а зачем тут вообще очереди?

nezorflame
04.07.2017
16:10:15
но очереди тут реально не нужны

Александр
04.07.2017
16:10:22

Ivan
04.07.2017
16:12:36
ну мало того, что это не будет работать для клиентских запросов. Так еще потом и замучаешься отлаживать, что у тебя происходит в случае баги, когда одни евенты туда-сюда летают.

Kristina
04.07.2017
16:16:19
Ну мне видится, что с фрейморками мы добавляем ещё один отдельный слой, от которого зависят все составляющие. Типа если два сервиса используют одну и ту же функцию, то потом, в случае доработки, их надо будет дублировать. С очередями все более локально - создал очередь и читай с нее
Опять же, как происходит взаимодействие с микросервисами, написанными на других языках?
Я не шарю, вопрос не риторический

Michael
04.07.2017
16:17:35

Aleksandr
04.07.2017
16:17:47
»> Опять же, как происходит взаимодействие с микросервисами, написанными на других языках?
у тебя микросервис отдает json, protobuf итд определенной схемы. Каким языком это сгенерировано по сути неважно

Kristina
04.07.2017
16:18:44
Надо будет попробовать поюзать крч, спасибо

Александр
04.07.2017
16:20:28
один фиг придется фреймворк писать (либо заюзать готовое), что на обычном rpc, что над очередями.

IronWolf
04.07.2017
16:21:25
handlers

Denis
04.07.2017
16:47:25

Google

Denis
04.07.2017
16:48:35
Я в последнее время стараюсь минимально юзать блокирующие вызовы
Cqrs в помощь как говорится

Sergey
04.07.2017
16:48:53

Denis
04.07.2017
16:49:24
Чем делать кашу с req/reply и pub/sub

Chuvi
04.07.2017
19:46:07
Всем ??.
Есть проблема с растрированием (в картинку) utf текста, который содержит эмодзи. Они либо квадратиками (если в шрифте нет эмодзи), либо панику вызывают, если есть. Никто не сталкивался?
Растрирую через github.com/fogleman/gg + golang/freetype, но проблема во втором как раз (судя по их репе).
Есть ли другие способы перевести текст в изображение?

serbernar
04.07.2017
21:34:34
О статусах и ошибках с кодом 200.

Труба
04.07.2017
22:00:00
Всем привет, пытаюсь записать в redis структуру CustomStruct. LPush реализует интерфейс MarshalBinary(), который конвертирует данные в []byte. Добавил метод MarshalBinary к CustomStruct, затем, получилось записать первый элемент из массива cs[0], а как записать туда весь массив? Прошу прощения за терминологию =)
LPush func(key string, values ...interface{}) *IntCmd
func SaveList(redis *redis.Client, cs []*CustomStruct) error {
return redis.LPush("testKey", cs[0]).Err()
}

Alexey
04.07.2017
22:02:05
for _, csItem := range cs {
err := redis.LPush("testKey", csItem).Err()
if err != nil {
break
}
}

Труба
04.07.2017
22:03:58
а это не слишком большой удар по производительности?

Alexey
04.07.2017
22:05:37
А, так можно

Труба
04.07.2017
22:05:44
что означают точки перед interface{} вроде как томжно весь массив отправить как в database/sql там аргументы отправляются пачкой