äžè¬ã«ãSObjectizerã«æ°ãããã®ã远å ããããšã¯ããã¬ãŒã ã¯ãŒã¯ã®æ©èœãåäžããã䜿ãããããåäžããããšããç¹ã§åžžã«å¿«é©ã§ãã ããããããã¯åžžã«ãå®è£ ã®èгç¹ããèŠãŠãåããããå¿«é©ã§ã·ã³ãã«ã§ãã
ã«ããã®äžã«ã¯ãSObjectizerã«1ã€ã®æ°ããæ©èœã远å ãããæ¹æ³ã«ã€ããŠã®çãã¹ããŒãªãŒããããŸãã èªè ã®äžã«ã¯ãå€ããã¬ãŒã ã¯ãŒã¯ãæ°ãããŠãŒã¶ãŒã®èŠæ±ã«ã©ã®ããã«é©å¿ããããç¥ããããšæã人ããããããããŸããã
åæ
ãã®ãããSObjectizerã®ãŠãŒã¶ãŒã®1人ã§ããPavelVainermanããSObjectizerã«ã¯ãšãŒãžã§ã³ãéã®äžæçãªå¯Ÿè©±ãå®è¡ããããã®æ¢è£œã®äŸ¿å©ãªããŒã«ããªããšããäºå®ã«æ³šç®ããŸããã
ãããæå³ãããã®ã§ããããšã倿ããŸããã ãšãŒãžã§ã³ãAããšãŒãžã§ã³ãBã«ãªã¯ãšã¹ããéä¿¡ãããšãŒãžã§ã³ãBããå¿çã¡ãã»ãŒãžãåä¿¡ããããšããŸãããããåæã«ããšãŒãžã§ã³ãAã¯5ç§ä»¥äžã®å¿çãåŸ ã¡ãããªããšä»®å®ããŸãã ããã«æãæµ®ãã¶äºçްãªãé¡ãã®ãœãªã¥ãŒã·ã§ã³ã¯ã次ã®ããã«ãªããŸãã
// -. struct request { const so_5::mbox_t reply_to_; // . ... // , .. }; // -. struct reply { ... }; class A : public so_5::agent_t { // , -. struct reply_timed_out final : public so_5::signal_t {}; ... // . void on_reply(mhood_t<reply> cmd) {...} void on_reply_timeout(mhood_t<reply_timed_out>) {...} ... // , B. void ask_something(const so_5::mbox_t & B_mbox) { // -. so_subscribe_self().event(&A::on_reply); so_subscribe_self().event(&A::on_reply_timeout); // . mbox, // . so_5::send<request>(B_mbox, so_direct_mbox(), ...); // , -. so_5::send_delayed<reply_timed_out>(*this, 5s); };
æ®å¿µãªããããã®åçŽãªããŒãžã§ã³ã¯ããè€éãªã¿ã¹ã¯ã«ã¯åçŽã§çè§£ããããééã£ã解決çãããããšããæ Œèšã®ç宿§ãæç¢ºã«ç€ºããŠããã ãã§ãã ããã«ã¯ããã€ãã®åé¡ããããŸãã
æåã®åé¡ã¯ãä¿çäžã®ã¡ãã»ãŒãžA :: reply_timed_outã«é¢é£ããŠããŸãã ãšãŒãžã§ã³ãBããã®å¿çãæééãã«å°çããªãã£ãå Žåã¯ãreply_timed_outã䜿çšããŠãã¹ãŠãé 調ã§ãã ååŸããŠåŠçãããããå¿ããŸãã ãããããšãŒãžã§ã³ãBããã®å¿çãæééãã«å°çããå Žåã¯ã©ããªããŸããïŒ reply_timed_outã¯ã©ããªããŸããïŒ
ãšãŒãžã§ã³ãAã«å±ããŸããreply_timed_outããã£ã³ã»ã«ãã人ã¯ããŸããã ãããã£ãŠãSObjectizerã¿ã€ããŒã®ã¹ã¬ãããèšå®ããã5ç§ãã«ãŠã³ãããŠã³ãããšããã«ãreply_timed_outã¡ãã»ãŒãžããšãŒãžã§ã³ãAã«é ä¿¡ãããŸããå¿ èŠããªããªã£ãã«ããããããããããåä¿¡ããŠââåŠçããŸãã äœãæªãã®ã ãšãŒãžã§ã³ãBããè¿ä¿¡ãåãåã£ãåŸãreply_timed_outã¡ãã»ãŒãžãå±ããªãããã«ããããšã¯æ£ããã§ãããã
ãããè¡ãæã確å®ãªæ¹æ³ã¯ãreply_timed_outãããµãã¹ã¯ã©ã€ããè§£é€ããããšã§ãã ãŸãã«ãããå¥ã®å€§ããªäŒè©±ã®ãããã¯ã§ããçç±ã 誰ããèå³ãæã£ãŠããå Žåã¯ããã®ãããã¯ã«ã€ããŠåå¥ã«è©±ãããšãã§ããŸãã ãããŸã§ã®éãé å»¶ã¡ãã»ãŒãžã®ç»é²è§£é€ã¯ãé å»¶ã¡ãã»ãŒãžã®åé¡ã解決ããããã®ã匷åãããå ·äœçãªããªãã·ã§ã³ã§ãããšããäºå®ã«éå®ãããŠããŸãã
2çªç®ã®åé¡ã¯ããšãŒãžã§ã³ãAããã®æ¹æ³ã§ãšãŒãžã§ã³ãBãšã®ã¿éä¿¡ããå¿ èŠããªãããšã§ããããããããšãŒãžã§ã³ãAã¯ãäžåºŠã«è€æ°ã®ãšãŒãžã§ã³ããšèŠæ±/å¿çã¡ãã»ãŒãžã亀æããŸãã ãããã£ãŠããªã¯ãšã¹ãããšãŒãžã§ã³ãBãšCã«åæã«éä¿¡ãããå ŽåããšãŒãžã§ã³ãAã¯å¿çã®éä¿¡å ãäœããã®æ¹æ³ã§çè§£ããå¿ èŠããããŸãã ãŸãã¯ã5ç§ä»¥å ã«å¿çãåä¿¡ãããªãã£ãã
2çªç®ã®åé¡ã¯ãèªåã®mboxãšãŒãžã§ã³ãAãè¿ä¿¡å ã¢ãã¬ã¹ãšããŠäœ¿çšããããšãæåŠããããšã«ãããå€å°ãªããšã䟿å©ã«è§£æ±ºãããŸãã æ°ããã€ã³ã¿ã©ã¯ã·ã§ã³ããšã«æ°ããmboxãäœæããæ¹ãç°¡åã§ãã ãããŠããã®æ°ããmboxããå¿çãåä¿¡ãããã®ç¹å®ã®èŠæ±ã®ä¿çäžã®ã¡ãã»ãŒãžã«äœ¿çšãããŸãã
ãã ããæ°ããmboxãå°å ¥ãããããã«ãmboxãäžèŠã«ãªã£ããåé€ããå¿ èŠããããŸãã ãããè¡ãã«ã¯ããã®mboxã®ãµãã¹ã¯ãªãã·ã§ã³ãåé€ããå¿ èŠããããŸãã ãµãã¹ã¯ãªãã·ã§ã³ãåé€ãããªãå Žåãmboxã¯åç¶ããŸããããã«ãããã¡ã¢ãªæ¶è²»ãåžžã«å¢å ããŸããæ°ãããªã¯ãšã¹ãããšã«æ°ããmbox-sãäœæãããããã®mbox-sã¯åé€ãããŸããã
äžè¬ã«ããããã®2ã€ã®åé¡ãèæ ®ãããšãåçŽãªè§£æ±ºçã¯éåžžã«åçŽã§ã¯ãªããã®ã«å€æãããŸãã
class A : public so_5::agent_t { // , -. struct reply_timed_out final : public so_5::signal_t {}; ... // , // , . void on_reply(const request_info & info, mhood_t<reply> cmd) {...} void on_reply_timeout(const request_info & info, mhood_t<reply_timed_out>) {...} ... // , . // , . void ask_something(const request_info & info, const so_5::mbox_t & dest) { // mbox . const auto uniq_mbox = so_environment().create_mbox(); // . auto subscriptions_dropper = [this, uniq_mbox] { so_drop_subscription<reply>(uniq_mbox); so_drop_subscription<reply_timed_out>(uniq_mbox); }; // -. so_subscribe(uniq_mbox) .event([this, info, subscriptions_dropper](mhood_t<reply> cmd) { // . subscription_dropper(); // . on_reply(info, cmd); }) .event([this, info, subscriptions_dropper](mhood_t<reply_timed_out> cmd) { subscription_dropper(); on_reply_timeout(info, cmd); }); // . mbox, // . so_5::send<request>(B_mbox, uniq_mbox, ...); // , -. so_5::send_delayed<reply_timed_out>(so_environment(), uniq_mbox, 5s); } };
ç§ãã¡ãæãã»ã©åçŽã§ã³ã³ãã¯ãã§ã¯ãªãããšã倿ããŸããã ããããããã¯ãã¹ãŠãšã¯çšé ããã®ã§ãã ãããã£ãŠããã®ãœãªã¥ãŒã·ã§ã³ã«ã¯äŸå€çãªå®å šæ§ã¯ãããŸããã äžèŠã«ãªã£ãä¿çäžã®ã¡ãã»ãŒãžã¯ãæç€ºçã«ãã£ã³ã»ã«ãããŸããã ãããããã£ãšéèŠãªããšã¯ããšãŒãžã§ã³ãAãäžèšã®äŸã®ããã«1ã€ã®ããã©ã«ãç¶æ ã§ã¯ãªããããããç°ãªãã¡ãã»ãŒãžã«å¿çããå¿ èŠãããè€æ°ã®ç¶æ ãæã¡ããå Žåããã¹ãŠãããã«æªåããŸãã AãšBã®éã®äº€æã«1ã€ã®å¿çã¡ãã»ãŒãžã§ã¯ãªããè€æ°ã®å¿çã¡ãã»ãŒãžãå¿ èŠãªå Žåããã¹ãŠãããã«æªåããŸãã ããšãã°ãè¿ä¿¡ã®ä»£ããã«successed_replyãšfailed_replyãããå ŽåããšãŒãžã§ã³ãAã®éçºè ã®äœæ¥éã¯èããå¢å ããŸãã
ãªãç§ãã¡ã¯ãããªåé¡ã«çŽé¢ããªãã£ãã®ã§ããïŒ
åŽã«å°ããªåŸéã PavelVainermanãç§ãã¡ã«èšã£ãŠããããšãæããã«ãªã£ããšããç§ãã¡èªèº«ãé©ããŸããã çµå±ã®ãšãããåé¡ã¯æ¬åœã«æããã§ãã ãããããªãç§ãã¡ã¯èªåèªèº«ã§ãããèŠã€ããªãã£ãã®ã§ããïŒ å°ãªããšã泚æãåèµ·ãããã®åé¡ã®è§£æ±ºçãSObjectizerã«å«ããããã«ãããŸãé »ç¹ã«ã¯ééããŸããã
ããã«ã¯ãããã2ã€ã®èŠå ããããŸããã
ãŸãã SEDAã¢ãããŒãã®ã¢ã€ãã¢ãããã«æãä»ããŸãã ã ããã§ã¯ããšãŒãžã§ã³ãã®æ°ãå°ãªãããšãŒãžã§ã³ãéã§å®å®ããéä¿¡ã確ç«ãããããããã®ãããªåé¡ã¯ååãšããŠãããŸããã
第äºã«ããããããç§ãã¡ãšã®1åã®1åéãã®å¯Ÿè©±ã¯ãçåœãšãŒãžã§ã³ãéã§æãé »ç¹ã«äœ¿çšãããŸãã ãããŠãåäžã®æäœãåŠçããããã ãã«çãããšãŒãžã§ã³ãã«ãšã£ãŠããããã®åé¡ã¯é¢ä¿ãããŸããã
æ°ãã人ãããªãã®ããŒã«ã䜿ãå§ãããšããã«ã圌ããããªããããªãããããããã®ã«æ £ããŠããæ¹æ³ãšã¯ãŸã£ããç°ãªãæ¹æ³ã§ããŒã«ã䜿ããããšããã«å€æãããšããäºå®ã«æ³šæããããšã¯äžå¯èœãããããŸããã
æåŸã«äœãããŸãããïŒ
ãã®çµæãSObjectizerã®ã¢ããªã³ãso_5_extraãšããååã§æ¡åŒµãããããããµããŒãã远å ããŸããã éåææäœ ã éåææäœã«ãããäžèšã®äŸã次ã®ããã«æžãæããããšãã§ããŸãã
class A : public so_5::agent_t { // , -. struct reply_timed_out final : public so_5::signal_t {}; ... // , // , . void on_reply(const request_info & info, mhood_t<reply> cmd) {...} void on_reply_timeout(const request_info & info, mhood_t<reply_timed_out>) {...} ... // , . // , . void ask_something(const request_info & info, const so_5::mbox_t & dest) { // mbox . const auto uniq_mbox = so_environment().create_mbox(); // . so_5::extra::async_op::time_limited::make<reply_timed_out>(*this) .completed_on(uniq_mbox, so_default_state(), [this, info](mhood_t<reply> cmd) { on_reply(info, cmd); }) .timeout_handler(so_default_state(), [this, info](mhood_t<reply_timed_out> cmd) { on_reply_timeout(info, cmd); }) .activate(5s); // . mbox, // . so_5::send<request>(B_mbox, uniq_mbox, ...); } };
so_5_extraã®æ°ããéåææäœã®è©³çްã«ã€ããŠã¯ã ãã¡ããã芧ãã ãã ã
ãããã仿¥ã¯éåæã¡ãã»ãŒãžèªäœã®äœææ¹æ³ã«ã€ããŠã¯èª¬æããŸããã ãŸããso_5_extraã§éåæã¡ãã»ãŒãžãæ©èœãããããã«SObjectizerã§è¡ãå¿ èŠã®ãã£ãããšã«ã€ããŠã
time_limitedéåææäœã®å®è£ ã®åé¡ã¯äœã§ãããïŒ
So_5_extraã«ã¯ãéåææäœã®2ã€ã®å®è£ ãå«ãŸããŸããtime_unlimitedïŒæäœã®å®è¡æéã«ãŸã£ããå¶éããªãå ŽåïŒãštime_limitedïŒæäœãå²ãåœãŠãããæéå ã«å®äºããå¿ èŠãããå ŽåïŒã äžèšã§ã¯ãã»ãŒtime_limitedæäœã§ããã äž»ãªé害ã®1ã€ã§ãã£ãã®ã¯å®è£ ã§ããã
äžçªäžã®è¡ã¯ãtime_limitedæäœãéå§ãããšãã«ãä¿çäžã®ã¡ãã»ãŒãžã確å®ã«åä¿¡ããŠåŠçããå¿ èŠããããããéåææäœã®æéãå¶éããŠããŸãã ãããŠãããã¯ãå¿ ç¶çã«ããã¹ãŠãåçŽã§ã¯ãããŸããã§ããã
å®éã«ã¯ãSObjectizerã®éèŠãªæ©èœã®1ã€ã¯ãšãŒãžã§ã³ãã®ç¶æ ã§ã ã ç¶æ ã«ããããšãŒãžã§ã³ãã¯ç¶æ ããšã«ç°ãªãã¡ãã»ãŒãžã»ãããåŠçã§ããŸãã ãŸãã¯ãç°ãªãç¶æ ã§åãã¡ãã»ãŒãžãç°ãªãæ¹æ³ã§åŠçããã ãã ãããã¹ãŠã®ç¶æ ã§ã¡ãã»ãŒãžãåŠçããå¿ èŠãããå Žåã¯ãç¶æ ããšã«ã¡ãã»ãŒãžãã³ãã©ãŒã«æç€ºçã«çœ²åããå¿ èŠããããŸãã ã€ãŸã 次ã®ããã«æžããŸãïŒ
class default_msg_handler_demo : public so_5::agent_t { // . state_t st_first{this}, st_second{this}, st_third{this}; ... // , . void some_msg_default_handler(mhood_t<some_msg> cmd) {...} ... virtual void so_define_agent() override { ... // " ". so_subscribe(some_mbox) .in(st_first).in(st_second).in(st_third) .event(&default_msg_handler_demo::some_msg_default_handler); ... } };
åœç¶ãããã¯æè¯ãã€æã䟿å©ãªãœãªã¥ãŒã·ã§ã³ã§ã¯ãããŸããã
éå±€ç¶æ ãã·ã³ã®æ©èœã䜿çšããããšã§ãããç°¡åã§äŸ¿å©ã«ãªããä¿¡é Œæ§ãé«ããããšãã§ããŸãã
class default_msg_handler_demo : public so_5::agent_t { // . // . state_t st_parent{this}, // , . st_first{initial_substate_of{st_parent}}, st_second{substate_of{st_parent}}, st_third{substate_of{st_parent}}; ... // , . void some_msg_default_handler(mhood_t<some_msg> cmd) {...} ... virtual void so_define_agent() override { ... // " " . so_subscribe(some_mbox) .in(st_parent) .event(&default_msg_handler_demo::some_msg_default_handler); ... } };
ããã§ããšãŒãžã§ã³ãã®ç¶æ ã«é¢ä¿ãªãããããã©ã«ãããã³ãã©ãŒãåŒã³åºãããŸãã
ããããæ®å¿µãªããããã®ã¢ãããŒãã§ã¯ããšãŒãžã§ã³ããéå±€ç¶æ ãã·ã³ã䜿çšããŠæåã«èšèšãããå¿ èŠããããŸãã so_5_extraããã®éåææäœã䜿çšããããšã¯ããŠãŒã¶ãŒã«ãã®ãããªå³ããèŠä»¶ã課ããå Žåã«ã¯äŸ¿å©ã§ã¯ãªãã§ãããããšãŒãžã§ã³ãã§èŠªç¶æ ãäœæããŠãã ããã
ãããŠããããè¡ãããšã¯ååãšããŠåžžã«å¯èœã§ã¯ãããŸããã åºæ¬åbasic_device_managerãæã€ãšãŒãžã§ã³ãã©ã€ãã©ãªã誰ããæžãããšããŸãã ç¬èªã®ç¶æ¿ã¯ã©ã¹my_device_managerãäœæããmy_device_managerã§éåææäœã䜿çšããå¿ èŠããããŸãã éçºè ãbasic_device_managerã§st_parentãªã©ãè¡ããªãã£ãå Žåãããã«st_parentã远å ããŸããã
äžè¬çã«ããšãŒãžã§ã³ãå®ãŠã®ã¡ãã»ãŒãžããã£ãããããã®ã®ããšãŒãžã§ã³ãã«ãã£ãŠåŠçãããªãã£ãã¡ãã»ãŒãžããã£ããããå¿ èŠããããŸããã ãã®ãããªã¡ãã»ãŒãžã¯ãæã ãããã¬ã¿ãŒãšåŒã°ããŸã ã
ç§ãã¡ã¯äœãã©ããã£ãŠãã£ãã®ã§ããïŒ
ãããã¬ã¿ãŒãã³ãã©ãŒ
éçºè ããéåžžã®ããã³ãã©ãŒã«ãã£ãŠåŠçãããªãã£ãã¡ãã»ãŒãžã«èªåã®ãã³ãã©ãŒãæããããšãã§ããããã«ããŸããã äŸïŒ
class deadletter_handler_handler_demo : public so_5::agent_t { state_t st_first{this}, st_second{this}, st_third{this}; ... void deadletter_handler(mhood_t<some_msg> cmd) {...} ... void normal_handler(mhood_t<some_msg> cmd) {...} ... virtual void so_define_agent() override { ... // "" st_first. so_subscribe(some_mbox) .in(st_first).event(&deadletter_handler_demo::normal_handler); // "" . so_subscribe_deadletter_handler(some_mbox, &deadletter_handler_demo::deadletter_handler); ... } };
ããã§ããšãŒãžã§ã³ããst_firstç¶æ ã®ãšãã«some_mboxã¡ãŒã«ããã¯ã¹ããsome_msgã¡ãã»ãŒãžãåä¿¡ãããšãã¡ãã»ãŒãžãåŠçããããã«normal_handlerãåŒã³åºãããŸãã ãã ãããšãŒãžã§ã³ããä»ã®ç¶æ ã«ããå Žåããã®ã¡ãã»ãŒãžãåŠçããããã«deadletter_handlerãåŒã³åºãããŸãã
ãã®æ©èœã¯time_limitedæäœã§äœ¿çšãããŸãã æäœãã¢ã¯ãã£ãã«ãªããšãdeadletter_handlerã¯ã¿ã€ã ã¢ãŠãã®æéåãã«é¢ããã¡ãã»ãŒãžã§ãã³ã°ã¢ããããŸãã ãŸãããã®ã¡ãã»ãŒãžãå°çããæç¹ã§ãšãŒãžã§ã³ãã®ç¶æ ãäœã§ãã£ãŠããã¡ãã»ãŒãžã¯åä¿¡ãããŠåŠçãããŸãã ããã«ãããéåææäœãå®äºã§ããŸãã éçºè ãééã£ãŠããŠãå¿ èŠãªãã¹ãŠã®ã¿ã€ã ã¢ãŠããã³ãã©ãå®çŸ©ããªãã£ãå Žåã§ãã
å®è£ ãããŠããªãé åçãªã¢ã€ãã¢
ãããã¬ã¿ãŒãã³ãã©ãŒã®åé¡ãå®åŒåããããšããã«çããæåã®èãã¯ãåãšãŒãžã§ã³ãã«äœããã®èŠªã®ç¶æ ãæäŸããããšã§ããã ãããŠãä»ã®ãã¹ãŠã®å·ã¯èªåçã«ãã®åäŒç€Ÿã«ãªããŸãã ã€ãŸã åãšãŒãžã§ã³ãã«ã¹ãŒããŒã¹ããŒãã匷å¶ãããšããèãããããŸããã ããã¯ããã«ãããããã«ã€ããŠã¯äœãã§ããŸãã:)
ãã®ã¢ã€ãã¢ã¯ããµãã¹ã¯ãªãã·ã§ã³ãä¿åããã³æ€çŽ¢ããçŸåšã®ã¡ã«ããºã ã®èгç¹ããéåžžã«é åçã§ããïŒãã®ã¡ã«ããºã ã¯ããã»ã©åçŽã§ã¯ãããŸããïŒã
ãŸãããã®èãã¯ã€ããªãã®ãŒã®èгç¹ããéåžžã«çŸããã§ãã éå±€çãªæéç¶æ ãã·ã³ããã®ãŸãŸã
ããããç§ã¯ãããæŸæ£ããªããã°ãªããŸããã§ããïŒãããããã°ããã®éïŒïŒã
倱æã®äž»ãªçç±ã¯ãstate_tãªããžã§ã¯ããããªãéãããšã§ãã ã³ã³ãã€ã©ãæšæºã©ã€ãã©ãªãããã³ã³ã³ãã€ã«ãªãã·ã§ã³ã«å¿ããŠã64ãããã¢ãŒãã®state_tã¯150ã250ãã€ããããå ŽåããããŸãã åãšãŒãžã§ã³ãã«ã¹ãŒããŒã¹ããŒãã匷å¶çã«è¿œå ãããšãåãšãŒãžã§ã³ãã®ãéã¿ãã1.5ãã€ããã200ãã€ãå¢å ããŸãã ã¡ããã©ãã®ããã«ãçªç¶ã§ãã ãã®ãšãŒãžã§ã³ããã¹ãŒããŒã¹ããŒãããŸã£ããå¿ èŠãšããªãå Žåã§ãã
ããã«å¥ã®çç±ããããå®éã«ãããŸãã åãšãŒãžã§ã³ãã®ã¹ãŒããŒã¹ããŒãã¯ãSObjectizerã«ãšã£ãŠå€§ããªé©æ°ã§ãããéé ·ãªæ¹Ÿãããããäœãã«ã¯å€§ããããŸãã
ãã¹ãŠã®çµæãæ éã«æ€èšããããšãªãã ç§ã¯å人çã«å€§ããªçããæã£ãŠããŸã
SObjectizerã«ã¹ãŒããŒã¹ããŒãã远å ãã䟡å€ãããããããæªçšããå§ããŸãã
äžè¬ã«ãã¹ãŒããŒã¹ããŒãã®ã¢ã€ãã¢ã¯ããŒãžã§ã³5.5.21ã§ã¯æ©èœããŸããã§ããã ãããããããã¯èšæ¶ã«æ®ããŸããã ãããã圌女ã¯ãŸã 圌女ã®äœçŸãèŠã€ããã§ãããã 誰ããããã«ã€ããŠèããŠãããªããèããŠè°è«ããã®ã¯é¢çœãã§ãããã
å®éã®è§£æ±ºç
圌ãã¯ã¹ãŒããŒã¹ããŒãã®æŠå¿µãæŸæ£ããŸããããããã§ããµãã¹ã¯ãªãã·ã§ã³ãä¿åããããã®çŸåšã®ã¡ã«ããºã ã倿ŽããããããŸããã§ããã ãããã£ãŠã远å ã®state_tãªããžã§ã¯ããå¿ èŠã§ãããšãã解決çãèŠã€ãããŸããã ãããã 圌ã¯ãã¹ãŠã®ããã«ååšã ããã¹ãŠã®ãšãŒãžã§ã³ãã¯åœŒãåç §ããŸãã
ããã«ããããããã¬ã¿ãŒãã³ãã©ãŒã®ç»é²ãšæ€çŽ¢ã«åãããŒã«ã䜿çšããããšãã§ããŸããã å®éãso_subscribe_deadletter_handlerã¯ããŠãŒã¶ãŒç¶æ ã«ã¯èŠããªãç¹å¥ãªã¡ãã»ãŒãžãã³ãã©ãµãã¹ã¯ãªãã·ã§ã³ã«ãããŸããã ããŠãã¡ãã»ãŒãžã®ãããã¬ã¿ãŒãã³ãã©ãŒã®æ€çŽ¢ã¯ããã³ãã©ãŒã®éåžžã®æ€çŽ¢ã«ãããŸãããããšãŒãžã§ã³ãã®çŸåšã®ç¶æ ã§ã¯ãªãããã®ç¹å¥ãªäžå¯èŠç¶æ ãæ€çŽ¢ããŸãã 確ãã«ãã¡ãã»ãŒãžé ä¿¡ã¡ã«ããºã ã®ãã¬ãŒã¹ã¢ãŒãããªã³ã«ãªã£ãŠããå Žåã ããã€ãã®è¿œå ã®ã¢ã¯ã·ã§ã³ããããŸããããããã¯ãã§ã«éå±ãªè©³çްã§ãã
ãã¹ãŠããšãŠãæçœã§ã·ã³ãã«ã§ãããïŒ
åºçåã«ãã®èšäºãèªãã ãšããããçš®ã®äºçްãªããšãèšãããŠãããšæã£ãã ãŸãããã¹ãŠãã·ã³ãã«ã§æç¢ºãªããã§ãã ãããããã®ãã·ã³ãã«ã§æç¢ºãªãéã¯ãè¿ éã§ããªããçŽæ¥çã§ããæçœã§ããªãããšã倿ããŸããã 誰ããèå³ãæã£ãŠããå Žåãéåææäœã®ã¢ã€ãã¢ã®é²åã®çè·¡ã¯ãããã°èšäºã®ãã®ããã·ãªãŒãºã§èŠã€ããããšãã§ããŸãïŒ No.1 ã No.2 ã No.3 ã çµå±ã®ãšããããã®ã·ãªãŒãºã®æåŸã®æçš¿ã§ãããçµæã®ãœãªã¥ãŒã·ã§ã³ã説æããŠããŸããã§ããã ç§ã¯èªåèªèº«ã®é倧ãªèª€ç®ã«ã€ãŸãããªããã°ãªããããªããžã§ã¯ãéã®åŸªç°ãªã³ã¯ãååšããå Žåã«ã¡ã¢ãªãªãŒã¯ãé²ãæ¹æ³ã«ã€ããŠå°æããŠããŸããã ããããããã¯å šãç°ãªã話ã§ã...
çµè«ã«ããã€ãã®èšè
æåã«ããããšã...
SObjectizerã®éçºãæäŒã£ãŠããããã¹ãŠã®äººã«æè¬ããŸãïŒSO-5ã䜿çšããŠèªåã®èããææ¡ã衚çŸããŠããã人ïŒããPavelVainermanã«ç¹å¥ãªæè¬ãæ§ããŸã ïŒããŸã SO-5ã䜿ã£ãŠããªããããã³ããªã©ãæäŒã£ãŠãããŠãã人ïŒããããšããç¹ã«ã masterspline ïŒãããã³githubã®ããŸããŸãªãªãœãŒã¹ãšã¹ã¿ãŒã®SObjectizerã«é¢ãããã¥ãŒã¹ã«+1ãå ¥ããã®ãé¢åã§ã¯ãªã人ã ã:)ã©ããããããšãïŒ
...ãããŠãè¿ãå°æ¥ã®èšç»ã«ã€ããŠç°¡åã«
è¿ãå°æ¥ã5.5.22ãšããçªå·ã§SObjectizerã®æ¬¡ã®ããŒãžã§ã³ã®äœæ¥ãéå§ããäºå®ã§ãã 5.5.22ã§èŠããäž»ãªæ°æ©èœã¯ããšãŒãžã§ã³ãã®äžŠåç¶æ ã®ãµããŒãã§ãã ãšãŒãžã§ã³ãã¯ãã§ã«éå±€ç¶æ ã®é«åºŠãªæ©èœã䜿çšã§ããŸãã ç¶æ ã®ãã¹ããç¶æ ã®æµ ãå±¥æŽãšæ·±ãå±¥æŽãå ¥å/åºåãã³ãã©ãŒãç¶æ ãç¶æããããã®æéå¶éãªã©ã ãã ããSObjectizerã«ã¯ãŸã 䞊åç¶æ ããããŸããã
äžæã¯ãäœããã®çç±ã§ããããããŸããã§ããã ããããå®éã«ã¯ãäžéšã®ãŠãŒã¶ãŒã¯äžŠè¡ç¶æ ãå¿ èŠãšããçæŽ»ã楜ã«ããããšã瀺ãããŠããŸãã ã ããç§ãã¡ã¯ããããè¡ããŸãã 誰ããè°è«ã«æåŸ ãããŠããŸãã建èšçãªèæ ®äºé ãç¹ã«ç·Žç¿ãå人çãªçµéšããã®äŸã¯ãç§ãã¡ã«ãšã£ãŠéåžžã«åœ¹ç«ã¡ãŸãã
ãŸããäžè¬ã«ãSObjectizerã®å°è±¡ã奜ããªãã®ãå«ããªãã®ãSO-5ã«æã¡ãããã®ãèŠã€ããããšã¯è峿·±ãããšã§ã...ããã¯ãã¡ãããSObjectizerã«é¢ãã質åã«çããæºåãã§ããŠããŸãã