Как только в этом consumer'e вызывается await, управление вернется вызывающему потоку, который тут же подхватит следующее событие из очереди и вызывает consumer для второго сообщения PersonalDataUpdated.
Выскажу свою идею.
Смотрите, если у вас сформировался пул событий, которые вы будете отрабатывать конкурентно, то проблема немного шире.
Допустим у вас несколько инстансов данного консьюмера.
Получается, что они разбирают события и могут это сделать не в том порядке в котором вам нужно (т.е. данные про Update будут сохраняться первее чем про Create). Такая ситуация может быть и с несколькими событиями Update.
Вам нужно в БД хранить timestamp и в событие тоже передавать такое поле. И можно будет посмотреть - это самые последние данные приехали или что-то когда-то потерялось и теперь мы это обрабатываем.
Ну, а если у вас пришел Update до Create, то вероятно нужно отбросить этот ивент и не поменчать его как обработанный, а подождать когда приедет Create.
Нужно всегда понимать, что приложение может быть на разных физических машинах, могут быть глюки в сети и много инстансев сервисов и если шина не гарантирует порядок (вот тут я не в курсе насчет рэбита), то нужно адаптировать код под эти условия.
Василий Банников, посмотрел еще у одной блогерки как работает.
Пришло письмо, веротяно автоматическое, что в течении 3 дней пришлют книгу.
Наверное она больше заморачивается с утечкой в сеть и не дает ссылку, а высылает книгу лично. Не удивлюсь если там вотермарк будет, т.к. она недавно жаловалась, что слили книгу :)
Скорее всего 3 дня - это если на выходные попадает, а потом кто-то обрабатывает руками заяки.
Хмм.... На маленьких оборотах в первое время наверное очень даже норм вариант.
За Power Query спасибо! Инструмент мощный, но не думаю, что это подходит, т.к. у меня непростые преобразования данных + технология довольно непопулярная, поэтому не хочу завязывать все на ней.
Навеяло мне мысль, что я могу не выгружать данные удобные для SQL таблицы, а договориться о формате между екселькой и сервером. ПМ работает с таблицой, валидируе ее нажатием на кнопку и дальше идет снхронизация с сервером. Ошибочные ячейки подсвечиваются красным и все в таком духе. Всю логику можно перенести в excel скрипт. Сервер будет принимать эту таблицу и сам раскидывать ее по таблицам в рамках транзакции.
Нужно только понять как это может работать с помощью c# :) и может ли вообще. Спасибо!
Спасибо за ответ. Первым делом я узнаю какие трудности возникают при ручной обработке данных, какие сценарии бывают и т.д.. Это все так. Но в итоге у меня должно быть понимание, как сделано у лучших аналогов (конкурентов), чтобы почерпнуть оттуда идеи, т.к. подобного рода задачи не решал в UI.
Я думаю, что если я отдам программу в виде консоли в пользование нашим ПМ, а потом и клиентам, то меня не поймут
Владимир Коротенко, почему на линуксе - планирую много чего в докерах поднимать и интегрировать друг с другом. Виндовс дороже будет обходиться для VPS как минимум + на линуксе давно все запускаю и уже привык что там 1 Гб хватает много на что. В винду без UI я вообще не умею.
Требования - это будет CRM для агентства недвижимости - заявки автоматически из другого приложения прилетать будут. По хорошему хотелось бы добавлять вывод аналитики для чего мне захочется и без того, чтобы пол проекта переделать.
+ для разных агентов по ролям разные фичи могут быть
В общем конкретных требований еще нет, но то, что CRM нужна будет - это 100 процентов
Выскажу свою идею.
Смотрите, если у вас сформировался пул событий, которые вы будете отрабатывать конкурентно, то проблема немного шире.
Допустим у вас несколько инстансов данного консьюмера.
Получается, что они разбирают события и могут это сделать не в том порядке в котором вам нужно (т.е. данные про Update будут сохраняться первее чем про Create). Такая ситуация может быть и с несколькими событиями Update.
Вам нужно в БД хранить timestamp и в событие тоже передавать такое поле. И можно будет посмотреть - это самые последние данные приехали или что-то когда-то потерялось и теперь мы это обрабатываем.
Ну, а если у вас пришел Update до Create, то вероятно нужно отбросить этот ивент и не поменчать его как обработанный, а подождать когда приедет Create.
Нужно всегда понимать, что приложение может быть на разных физических машинах, могут быть глюки в сети и много инстансев сервисов и если шина не гарантирует порядок (вот тут я не в курсе насчет рэбита), то нужно адаптировать код под эти условия.