|
|
||||||
Задача дизайна - прокинуть детали низкоуровневой реализации на более высокий уровень и вернуть обратно22.11.2016, 13:37. Показов 2238. Ответов 34
Метки нет (Все метки)
Привет!
Задача возникла на работе. Мозговым штурмом было предложено 100500 реализаций, одно из них выбрали, но хотелось бы посмотреть на альтернативные варианты ![]() Итак - есть RPC канал, который реагирует на события AMQP сервера (используется событийная модель). Из RPC канала нужно асинхронно ответить на сообщение, для этого AMQP нужны данные, о которых знает только AMQP. Т.е. эти данные нужно прокинуть из AMQP в RPC, и RPC потом должен эти данные вернуть. Чтоб все было кошерно нужно: 1. Чтобы RPC не знал об AMQP (транспорт должен быть заменяемым) 2. Не нужно заставлять пользователя (т.е. RPC) что-то куда-то прокидывать Чтоб было понятней (очень упращенный вариант)
0
|
||||||
| 22.11.2016, 13:37 | |
|
Ответы с готовыми решениями:
34
Необходим более высокий уровень знаний! Ежедекадно в течение июня измерялся уровень воды в десяти речках. Определить подекадно: в каких речках наблюдался самый высокий уровень Высокий уровень |
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
|
| 23.11.2016, 13:44 | |
|
Kastaneda, то есть:
-пришло сообщение из космоса на 1-й уровень (мы добавили к сообщению какие-то свои пометки) -сообщение пересылается с 1-го на 2-й уровень -ответ посылается со 2-го на 1-й уровень -ответ уходит с 1-го уровня в космос (мы добавили к ответу какие-то свои пометки которые были добавлены к сообщению когда оно пришло) так? ----- ну тогда все нормально - взять и пихать в экстру. 2-й уровень даже не будет знать что там - просто перекинет экстру в ответ. а 1-й уровень сам должен знать как ему и что использовать
0
|
|
|
Комп_Оратор)
|
|||
| 23.11.2016, 13:46 | |||
![]() Добавлено через 1 минуту
0
|
|||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
||
| 23.11.2016, 13:53 | ||
|
1
|
||
|
Комп_Оратор)
|
|||
| 23.11.2016, 13:56 | |||
|
И заставить его вернуть её может быть самостоятельной задачкой. ![]() Или я усложняю, Kastaneda? Добавлено через 58 секунд ![]() Но фраза о том что "2 не должен знать" звучит довольно жестко. Как же он добавит к тому что "знает". Ему что, метод расшифровки сообщения и подготовки ответа сереализовать и в сообщение положить вначале?
0
|
|||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
|
| 23.11.2016, 14:06 | |
|
IGPIGP, если фраза "2 не должен знать" моя то я имел ввиду что 2-й уровень просто будет знать что нужно прицепить к ответу экстру взятую из запроса. содержимое в этом случае знать не нужно. нужно знать только размер. ну или в более общем случае - нужно только скопировать ссылку на экстру или вызвать метод clone
0
|
|
|
Комп_Оратор)
|
|||
| 23.11.2016, 14:23 | |||
![]() Тут возможно, надо анализировать активное содержимое сообщения, если оно есть. (полубред в отсутствии конкретики).
0
|
|||
|
|
||||||||
| 24.11.2016, 07:34 [ТС] | ||||||||
|
1. На AMQP сервер приходит сообщение. Сообщение содержит в том числе поля replyTo и correlationID, которые нужны для формирования ответа на это сообщение.2. Сообщение нужно отдать на верх (уровень RPC). 3. RPC должен его обработать и ответить. На уровне RPC ответ - это просто string4/ AMQP должен упаковать этот ответ (string) в свой формат сообщения. Для этого ему нужны replyTo и correlationID,Менять по идее можно все, что угодно. Чтоб было понятно, у нас тут были предолжены например такие варианты:
Это более менее адекватные предложения (были совсем не адекватные ), но мне лично ни один из этих подходов не нравится. Интуитивно чувствуется какая-то костыльность, есть ощущение, что можно сделать лучше/проще, но решение в голову не лезет.
0
|
||||||||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
||
| 24.11.2016, 10:09 | ||
|
-этот класс имеет виртуальный метод "добавить данные" принимающий и сохраняющий в объекте некие данные (replyTo и correlationID в случае AMQP) и "сформировать ответ" принимающий message от RPC и возвращающий то что должен послать AMQP (или иная сущность) -написать производный класс "сообщение AMQP" в котором реализовать эти методы -во время приема сообщения "добавлять данные" -перед отправкой "формировать ответ"
0
|
||
|
Комп_Оратор)
|
|||
| 24.11.2016, 11:00 | |||
Поэтому, говоря мутно и заклинательно: Если в сообщении AMPQ можно передать метод который будет автоматически запущен пока текст сообщения еще не потерян, то можно этот метод использовать либо путём расширения его кода, либо путём приаттачивания делегата к программному обеспечению RPC. Но избыточной информации в виде как активной части сообщения так и прилагаемых данных не избежать. В этом случае "RPC не знает" будет означать, "не должен знать до получения". Даже при использовании делегата, он таки не знает, хоть и может проверить цепочку актуальных делегатов. Потому что новый может её изменить. ![]() Но при отправке он будет знать и делать. Иначе, нужен прокси хардвер объект, который будет между. То есть будет включать в себя RPC. Но это та же парта, но тяжелая. ![]() Простите, если не врубаюсь.
2
|
|||
| 24.11.2016, 11:04 | |
|
Не по теме: IGPIGP, магнитный монополь... :)
0
|
|
| 24.11.2016, 11:10 | ||
|
Не по теме:
0
|
||
|
|
|||||
| 24.11.2016, 12:17 [ТС] | |||||
|
Добавлено через 8 минут
1
|
|||||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
||
| 24.11.2016, 12:27 | ||
|
Добавлено через 2 минуты ...даже если так базовый класс может поддерживать единую для всех реализаций функцию "узнай какого типа сообщение внутри меня" - если при ответе мы видим что сообщение сформировано другой реализацией очевидно был горячий рестарт и нам не остается ничего кроме как отбросить такое сообщение так как мы не знаем как с ним работать
0
|
||
|
Комп_Оратор)
|
|||
| 24.11.2016, 13:12 | |||
|
Это не потому, что фраза "знание умножает скорбь" неправа. Это потому что и незнание её тоже, мягко говоря, не уменьшает. Только мы с Вами можем её уменьшить. Например, тиснуть вот такой смайлик:
0
|
|||
|
|
|
| 28.11.2016, 17:53 | |
|
Kastaneda, очень долго читал, но так до конца и не понял. Вы можете словесно-схематично+абстрактно (без аббривеатур, а на уровне класс1/черный_ящик1) показать желаемую схему работы в контексте обмена данными?
1
|
|
| 28.11.2016, 17:53 | |
|
Почему высокий уровень на пине? Реагирование программы на высокий уровень шума Высокий уровень доверия клиент-сервер Работа со звуком более или менее низкий уровень. Получить уровень сигнала микрофона Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|