Вопрос по архитектуре

16 views
Skip to first unread message

Andrey Deykunov

unread,
Apr 15, 2021, 8:18:40 AM4/15/21
to SObjectizer
Доброго дня!

У меня вот какой вопрос. Предположим есть актор, обслуживающий запросы к БД. Есть множество акторов, которые посылают запросы используя этот актор. Каким образом лучше всего реализовать отправку результатов. Я видел в extra примеры асинхронного взаимодействия so_5::extra::async_op, но там используются именованные боксы. Не лучше ли включать в сообщение обратный адрес (mbox) клиента и какие в принципе есть best practice для такой задачи?

Спасибо,
Андрей 

Yauheni Akhotnikau

unread,
Apr 15, 2021, 8:42:06 AM4/15/21
to SObjectizer
Хорошей практикой как раз является передача в сообщении-запросе mbox-а, на который агент-инициатор ждет ответа (обычно это direct-mbox агента-инициатора).

В примере для so_5::extra::async_op (вот в этом, скажем: https://github.com/Stiffstream/so5extra/blob/master/dev/sample/so_5_extra/async_op/time_unlimited/simple/main.cpp) именованные mbox-ы используются лишь для простоты самого примера. Это позволяет экземпляру customer_t общаться с разными service_provider-ами не создавая дополнительных mbox-ов, но при этом строго различать от какого service_provider-а пришел ответ.

Кстати говоря, если есть агент-сервис S и агент-клиент C, и C многократно обращается к S (при этом в обработке может быть сразу несколько запросов от C), то в этом случае C следует помещать в сообщения-запросы не только обратный mbox, но еще и некоторую дополнительную информацию, которая позволит различать ответы между собой.

Andrey Deykunov

unread,
Apr 15, 2021, 9:18:29 AM4/15/21
to SObjectizer
Спасибо, Евгений!

четверг, 15 апреля 2021 г. в 15:42:06 UTC+3, eao...@gmail.com:
Reply all
Reply to author
Forward
0 new messages