á áá¬ážáá»á®áž
áá«ááá¬áá
áºáá¯á¡áá±áá²á· ááœáá·áºáá¬ážáá²á· áá»áœááºáá±á¬á·áºáááºááá¯ááºááᯠá
áááºáááºá
á¬ážá
áá¬áá±á¬ááºážáá²á· áááºáá
á¬áá»ááºááŸá¬ááœá±áá²á· ááá¯ááºáá±ážááá¯ááºáá¬ááá¯ááºááœá±ááᯠáááºáá¶áá»ááºážáááá¯á· áá®ááá¯ááºážáá¯ááºáá¬ážáá«áááºá á€á¡ááŒá±á¬ááºážá¡áá¬ááẠáá»áœááºá¯ááºá áááá¯ááááºážáááºážááá®ážá¡á
ááœáẠáá»áœááºá¯ááºááᯠá
áááºáááºá
á¬ážáá¬áá²á·ááŒá®áž ááá¯á¡áá»áááºááœáẠáááºážááá¯á·á¡ááŒá±á¬ááºážá áááºážááá¯á·á áá«ááá¬ááŸáá·áº ááá±á¬áá»ááºáá»á¬ážááᯠáá±ážááŒáá±á¬ ááá¬ááŸááºáá±á¬ááºážáá»á¬ážááᯠááŸá¬ááœá±ááœá±á·ááŸáááŒááºážááŒá±á¬áá·áº á
áœá²áááºážááœá¬ážáá²á·áááºá áááºážááá¯á·ááᯠáá»áœááºá¯ááºááá¯ááºááá¯áẠááŸá¬ááœá±ááœá±á·ááŸáááá·áº á¡áá±á·á¡áááẠááá±á·ááá¯áẠáááºááŸááá±áá²ááŒá
áºáááº- á
á®ážááœá¬ážáá±ážá¡ááá¬áá á
á®ážááœá¬ážááŒá
áºááá¯ááºááá¯ááºážááá¯ááá¯ááœáẠá
á¬áá±ážáá°áá»á¬ážááŸáá·áº ááá·áºááºáá»á¬ážááᯠááŸá¬ááœá±ááẠá¡á±á¬ááºááŒá±ááœáẠáááºáááºááŸá¬ááœá±áá±áá«áááºá
á áááºáá°ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá«á
ááááá¬ážááŸááºážááẠáá»áœááºá¯ááºáááá¯ááºááá¯ááºáááºááá¯ááºááŸá html á á¬áá»ááºááŸá¬áá áºáá¯áá»áŸáá¬ááŒá áºááŒá®ážá áá»áœááºá¯ááºááẠul list ááœáẠáááºááŸááºáá»á¬ážáá«áá±á¬ááá·áºááºáá»á¬ážááᯠááá·áºááœááºážáá¬ážáááºá á¡áá»áááºá¡ááá¯ááºážá¡áá¬áá áºáá¯á¡ááœááºáž á á¬áá»ááºááŸá¬ 20 ááá¯ááá¯ááºááŒá®ážáá±á¬á¡áá«á á€á¡áá¬ááẠá¡ááœááºáááá±á¬ááºááŸá¯áááŸáááŒá±á¬ááºáž áá»áœááºá¯ááºá áááºáááºááŒááºááŒá®áž áá¯ááºáááºážá ááºááᯠá¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºááẠáá¯á¶ážááŒááºáá²á·áááºá stackoverflow ááœááºá áá°á¡áá»á¬ážá¡ááŒá¬ážááẠáááºážááá¯á·ááááá¯ááá¯ááºáá»á¬ážááœáẠááá¯ááºáá»á¬ážááá¯ááœáŸááºááŒáááºááᯠáá»áœááºá¯ááºáááááŒá¯áááááºá ááá¯á·ááŒá±á¬áá·áº áááá¯ááá¯ááºáá»á¬ážááŸáááá·áº ááá¯ážááá¯ážááŸááºážááŸááºážááœá¬ážáá±á¬ php ááœáẠparser áá áºáá¯ááá¯áá±ážáá²á·ááẠ(SO ááœááºááá±á·á¡ááááááºá á¬áá»á¬ážááẠá€áá²á·ááá¯á·ááŒá áºáááº- `/users/1` ) ááá¯áá»ááºáá±á¬ tag á០ááá·áºááºáá»á¬ážááᯠáá¯ááºáá°ááŒá®áž SQLite ááœáẠááá·áºáá«á
áááºážááᯠáá¯ááááá¬ážááŸááºážáᯠáá±á«áºááá¯ááá¯ááºáááº- HTML ááœáẠáááºááŒáááºá á¬áááºážááᯠá¡á á¬ážááá¯ážááá·áº SQLite ááá¬ážáá áºáá¯ááŸá áá±á¬ááºážááŸáá·áºáá»á®áá±á¬ URL áá»á¬ážá á¯á ááºážááŸá¯á áá»áœááºáá±á¬áº áá®á á¬áááºážááŸá¬ ááá¯ážááŸááºážáá²á· ááŸá¬ááœá±ááŸá¯áá áºáá¯ááᯠáá¯ááºáá²á·áááºá áá¬ááŒá áºááá¯á·áá²ááá¯áá±á¬á· URL áá»á¬ážáá¬ááŸááá²á·áááºá ááá¯á·áá±á¬áẠááŸá¬ááœá±ááŸá¯ááẠáááºážááá¯á·á¡áá±á«áºá¡ááŒá±áá¶áááºá
á€á¡ááá·áºááœáẠáá»áœááºá¯ááºááẠááá±á¬áá»ááºááᯠá áœáá·áºááœáŸááºááŒá®áž á¡áá»áááºá¡áá±á¬áºááŒá¬ááŒá®ážáá±á¬áẠáááºážááᯠááŒááºáá¬áá²á·áááºá á€á¡ááá·áºááœááºá áá»áœááºá¯ááºááá¯ááºáááºážá¡ááœá±á·á¡ááŒá¯á¶ááẠáá¯á¶ážááŸá áºáá»á±á¬áºáá±ááŒá®ááŒá áºááŒá®ážá áá»áœááºá¯ááºááẠááá¯ááá±ážáááºáá±á¬ á¡áá¬áá áºáá¯ááᯠáá¯ááºáá±á¬ááºááá¯ááºáááºáᯠáá¶á á¬ážáááá«áááºá ááá¯á·á¡ááŒááºá á¡áá±á¬áºáá±ážáá áºááœááºáá±á¬áááºážááá¬áá»á¬ážááá¯áá»áœááºážáá»ááºááá¯ááºááá¯ááºááá¯á áááºááŸááá²á·áááºá
áá±ááºáá®áá¬ážááŸááºáž
ááŒá¿áá¬
á¡á±á¬ááºáá«ááá¯á·ááᯠáááŒáá¯ááºáááºáá¯ááºáá±á¬ááºááá·áº ááœááºááá¯ážááºá¡áááá·áºááŒáá·áº áááºááá¯ááºá¡áá áºáá»á¬ážááᯠáá±á«ááºážááá·áºáááº-
- á¡ááŒá±á¬ááºážá¡áá¬ááᯠURL ááŒáá·áº áá±á«ááºážáá¯ááºáá¯ááºáááºá
- HTTPS ááᯠáááá¯ááºááá¬ážá
- áááºááá¯ááºá á¡ááŸá áºáá¬áááᯠááááºážááááºážáá«á
- á¡áááºážá¡ááŒá ẠHTML ááŸáá·áº áá±á«ááºážá á®ážáá»á¬ážááᯠ"ááœáŸááºážááááºážááŒá¯áá¯ááºááŒááºáž" ááŸááºáááºážááœáẠááááºážáááºážáá¬ážáááºá
- á¡ááŒá±á¬ááºážá¡áá¬ááᯠááá¯ááºážááŒá¬ážá áááºááŒá¬ááŒá®áž áá±á«ááºážá ááºááŸáá·áº áá±á¬áºááŒáá»ááºááᯠáá¯ááºáá°áá«á
- áá±áá¬ááᯠáá®ážááŒá¬ážá á¯á ááºážááŸá¯ááœáẠááááºážáááºážáááºá
áááºážááẠáááºááá¯ááºáá»á¬ážááᯠááááºážáááºážáᬠá á¬áááºážáá áºáá¯ááœáẠááŒáááẠáá¯á¶áá±á¬ááºáá«áááºá
ááá¯á·áá±á¬áº á¡áá¬áááºááááºážááᯠá¡ááá¯á¡áá»á±á¬áẠá¡ááœáŸááºážáá±ážááŒááºážá á¡áá»áá¯ážá¡á
á¬ážááœá²ááŒááºážááŸáá·áº á¡ááá·áºáááºááŸááºááŒááºážá á¡áá¬á¡á¬ážáá¯á¶ážááᯠáá±ááºáá®áá±á¡á±á¬áẠááŒá¯áá¯ááºááŒááºážáá°áá±á¬ á¡áá°á¡áááẠá€áá«áá¬ááá¯ááºážááœáẠáá±á¬ááºážá
áœá¬ áááá¯ááºáá®áá«á ááŒá
áºááá¯ááºáá»á±ááŸááá±á¬ DDoS ááá¯ááŸá±á¬ááºááŸá¬ážááẠá
á¬áá»ááºááŸá¬áá»á¬ážááᯠááá¯á¡ááºáá±á¬ áá¯ááºááœá¬ážááŒááºážááŸáá·áº ááááºááá¯á·ááŒááºážááá¯á·ááᯠááá·áºááẠáááºáááºážáááºážááᯠááá¯ážááá¯ážááŸááºážááŸááºážááẠááá·áºááœááºážááŒááºážá
áá±áá°áá»á¡á¬ážááŒáá·áºá á¡áá¬á¡á¬ážáá¯á¶ážááᯠáááŒáá¯ááºáááºážáá¯ááºáá±á¬ááºááá¯ááºááŒá®ážá áááºáááºážáááºážááœáẠáááºááẠURL ááᯠááá¯ážááá¯ážááŸááºážááŸááºáž ááááºážáááºážááá¯ááºáááºá ááá¯á·ááŸáᬠááŒá®ážáá¬ážáá±á¬ daemon ááẠá á¬áááºážáá²á០URLs á¡ááœáẠáá¯ááºáá±á¬ááºá áá¬á¡á¬ážáá¯á¶ážááᯠáá¯ááºáá±á¬ááºááá¯ááºáááºááŒá áºáááºá ááá¯á·áá±á¬áº á€áá±áá¬ááœááºááẠâáááºážá á®ááŒááºážâ áá°áá±á¬ á áá¬ážáá¯á¶ážááẠáá°á·á¡ááá¯ááᯠááœáŸááºááŒáá±áááºá áááºážá á®ááŒááºážááᯠá¡áá±á¬ááºá¡ááẠáá±á¬áºáá«á á¡áá¯ááºá¡á¬ážáá¯á¶ážááᯠááá¯ááºážááŒá¬ážááŒá®áž á¡áááºážáá¯á¶áž áááŒáá¯ááºááẠáá¯ááºáá±á¬ááºááá¯ááºáá«áááºá
áá¯á¶ážááŒááºáá»ááº
áááºážá á®ááŒááºážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒá®áž á¡áá¯ááºá¡á¬ážáá¯á¶ážááᯠáá¯ááºáá±á¬ááºáááºá¡ááœáẠááŒá áºáááº-áá±á¬ááºážááŸááºááá·áº á áá áºáá áºáᯠáááºáá®ážáá«á ááŒá®ážáá±á¬á· Redis Streams ááᯠá ááºážááŒáá·áºáá»ááºáá±áᬠááŒá¬áá«ááŒá®á
PHP ááœáẠRedis á á®ážááŒá±á¬ááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá
áá¬ááŒá áºááá¯á·áá²ááá¯áá±á¬á· áá»áœááºá¯ááºááá°áá±á¬ááºááẠSymfonyá Laravelá Yii áá®áá°ážááŒá®ážáá¯á¶ážáá«ážáá²á០áá áºáá¯ááá¯ááºáá±á¬ááŒá±á¬áá·áº ááœááºáááºáá±á¬á á¬ááŒáá·áºááá¯ááºáá áºáá¯ááᯠááŸá¬ááá¯áá«áááºá ááá¯á·áá±á¬áº (áááá á áºáá±ážááŸá¯ááœááº) ááœááºáá±á«áºáá¬ááá·áºá¡ááá¯ááºáž áá±ážáááºáá±á¬á á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠáá áºáŠážáá»ááºážááŸá¬ááẠáááŒá áºááá¯ááºáá±á áááºážá á®ááŒááºážááá¯ááºáá¬á¡áá¬á¡á¬ážáá¯á¶ážááẠááœááºáá²á·áá±á¬áá«ážááŸá áºá 3 áááááááºááŒá¯áá¬ážáá±á¬ááá±á¬áá»ááºáá áºáá¯ááŒá áºááẠááá¯á·ááá¯áẠáá°áá±á¬ááºááŸáá·áºáá»áááºáááºáá¬ážáááºá
Symfony ááẠáá áºáŠážáá»ááºážá á® á¡áá¯á¶ážáááºáá±á¬ á¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáá°á¡ááŒá Ạáá»á¬ážá áœá¬ááŒá¬ážáááá²á·áááŒá®áž áááºážááá¯á·áá²á០á¡áá»áá¯á·ááᯠáá»áœááºáá±á¬áº á¡áá¯á¶ážááŒá¯áá±ááŒá®ááŒá áºáááºá ááá¯á·á¡ááŒáẠLaravel á០á¡áá»áá¯á·áá±á¬ á¡áá¬áá»á¬ážááᯠáá°áá±á¬ááºááá¯ááºááá¯áẠááá«áááºáá²á á¥ááᬠáááºážááá¯á·á ORM ááá¯áááºáž á¡áá¯á¶ážááŒá¯ááá¯ááºáááºá
symfony/messenger
ááááá¯á¶áž ááá¯ááºá á¬ážááŸááºáá±á¬ááºážááẠáá»ááºáá»ááºážááẠá á¶ááá°áá¬ááŒáá¯á¶áá±á«ááºááŒá®áž áá¶áááááºážá áœá¬ááŒáá·áº áááºážááᯠááá·áºááœááºážáá²á·áááºá áá«áá±ááá·áº Symfony áá²á· á¡ááŒááºáááºááŸá¬ á¡áá¯á¶ážááŒá¯áá²á· á¥ááá¬ááœá±ááᯠgoogle áá¯ááºááá¯á· ááá¯áááºáá²áá¬áá«áááºá á ááŒá¬áá á¬á á¡áááá¹áá«ááºáááŸááá±á¬á¡áááºáá»á¬ážá áááºáá±á·áá»áºáá»á¬ážáá±ážááá¯á·ááẠáááºá áºáá¬ážááŸáá·áº Redis ááá¯á·ááœáẠá¡áááºážáá±á«ááºážá á¯á¶á០áááºááá¯á·á á¯áá±ážááááºáááºážá
ááá¬ážáááºáááºááá¯ááºááŸáá
á¬ááœááºá
á¬áááºážááẠá¡áá±á¬áºáá±ážá¡áá±ážá
áááºááŒá
áºáá±á¬áºáááºáž Symfony á¡ááœáẠáááºážááá¯á·ááŸá
áºáááºáá±á¬ YML ááŸáá·áº symphonist ááá¯ááºáá°áá»á¬ážá¡ááœáẠá¡ááŒá¬ážááŸá±á¬áºáááºážáááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áᬠSymfony á¡ááœááºáᬠáá±á¬áºááŒáá¬ážáá«áááºá á¡áá°ážáááŒáá·áº ááŸá
áºáá
áºáá°áž á¡á¬ážáááºáááºáá»á¬ážááœáẠáááºáááºááŒááºážáá¯ááºáááºážá
ááºááᯠáá»áœááºá¯ááºá
áááºááááºá
á¬ážáá«á áá«áá±ááá·áº ááááºááŸááºáá² á¡áá»áááºá¡áá±á¬áºááŒá¬á¡á±á¬áẠáá«ááᯠáá¯ááºáá²á·ááááºá
Symfony áááºážááŒá áºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á á áá áºáá áºáá¯á¡á¬áž áááºááá¯á·áááºáá¯á¶ á¡áá±á¬ááºá¡áááºáá±á¬áºááẠááŒáá¯ážá á¬ážááŒááºážááẠáááºážáá»ááºáá±á¬ áááºááŸááºáááºá¡ááœáẠá¡áá±ážá¡ááœá²á¡áá¯ááºááá¯ááºáá±á
áá®á¡áá¬á¡á¬ážáá¯á¶ážááᯠá
á±á·á
á±á·á
ááºá
ááºááœá±ážááŒá®áž áá«á·áááºáá²á· áá
áºáá¯áá¯áá¯ááºááá¯á· ááŒáá¯ážá
á¬ážááŒá®ážáá±á¬ááºá áá« áá»áá¯ááºážáá±á¬ááºáá
áºáá»áá¯ážáá»áá¯áž áá¯ááºáá±áááºááá¯á· áááá¯á¶ážáá»á¯ááºááŒá®áž áááŒá¬ážáá
áºáá¯áá¯ááᯠá
ááºážááŒáá·áºááá¯á· áá¯á¶ážááŒááºááá¯ááºáááºá
á¡áááºážáá±á¬ááº/áááºážá á®
á€á á¬ááŒáá·áºááá¯ááºááẠLaravel á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááŸáá·áº á¡ááŒá¬ážááŸá®ááá¯ááŸá¯áá»á¬ážá áœá¬ááŸáá·áº áááºážáááºážáá»ááºáá»áẠáá»áááºáááºáá¬ážáá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºááẠáááºážááᯠá¡áá»áááºá¡áá»á¬ážááŒá®ážááá±ážáá²á·áá«- áááºážááᯠááá·áºááœááºážá ááŒáá·áºááŸá¯á ááŸá®ááá¯á¡á¬ážáá¬ážááŸá¯áá»á¬ážááᯠááŒááºááŒá®áž áá»ááºáá áºááá¯ááºáá«áááºá
yiisoft/yii2-queue
áá±á¬ááºážááŒá®á á€áá±áá¬ááœáẠáááºážá¡á¬áž Yii2 ááŸáá·áº áááºážáá»ááºáá±á¬ áááºááœááºááŸá¯áᯠáá¬áááºá០áá»ááºáá»ááºážáá°ááá²á·áááºá áá»áœááºáá±á¬áº áá®á á¬ááŒáá·áºááá¯ááºááᯠáá¯á¶ážáá²á·áááŒá®áž áá«áᬠáááá¯ážáá«áá°ážá áá«áá±ááá·áº Yii2 á¡áá±á«áºááŸá¬ áá¯á¶ážááá°áááºáá±áááºááá¯áá²á·á¡áá»ááºááᯠáá»áœááºáá±á¬áº áááœá±ážáá²á·áááá«áá°ážá
á¡ááŒá¬áž
GitHub ááœááºááœá±á·ááá»áŸá¡áá¬á¡á¬ážáá¯á¶ážááẠáá¯á¶ááŒááºá áááºáá»ááá±á¬á áá±ááºááá®áá±á¬á·áá±á¬á ááŒááºáá»á¬ážá áááºáááºážááœáá»á¬ážááŸáá·áº ááœááºááá·áºá¡áá»á¬ážá¡ááŒá¬ážááá«áááºááá·áº ááá±á¬áá»ááºáá»á¬ážááŒá áºáááºá
symfony/messenger ááá¯á· ááŒááºááœá¬ážáááºá áááºážááá¬ááá¯ááºáᬠá¡áá±ážá áááºáá»á¬áž
áá»áœááºáá±á¬áº áá®á á¬ááŒáá·áºááá¯ááºááᯠá¡ááŒá±ááŸá¬áá²á·áááŒá®áž á¡áá»áááºááá¯ááŒá¬ááŒá®ážá០áá»áœááºáá±á¬áºáá¯ááºááá¯ááºáá²á·áááºá á¡áá¬á¡á¬ážáá¯á¶ážá á¡áá±á¬áºáá±áž ááá¯ááá¯áá²á· ááá¯ážááá¯ážááŸááºážááŸááºáž ááŒá áºááœá¬ážáá«áááºá áááºá áºáá¬ážááᯠáá»ááºááŒááºážááŸá¬ á ááºáá¯á¶áá±ážáá±ážáá±áž áá¯ááºáá¬ážáá¬ááá¯á·... áá¬áá¬áá±á«ááºážáá»á¬ážá áœá¬áá²á· ááá°áá®áá²á· áááºááá¯ááºáááááá¬ááœá± ááŸáááá·áºáááºá
á¡ááá·áºá¡áááºážáááºáá»áŸáá¬-
- áá»áœááºá¯ááºááá¯á·ááẠááá¯ážááŸááºážá áœá¬áá±á«áºááá¯ááá¯ááºáá±á¬ áááºáá±á·áá»áºáá»á¬ážááᯠááá¯ááºááœááºáááºáá®ážáá±ážáá«áááºá
- áááºážááá¯á·ááᯠHandlerDescriptor (á á¬ááŒáá·áºááá¯ááºá០á¡áááºáž) ááŒáá·áº áá¯ááºááá¯ážáá¬ážáááºá
- HandlersLocator á¥ááá¬áá áºáá¯ááœáẠဠâáá±á¬áºááŒáá»ááºáá»á¬ážâ ááᯠáá»áœááºá¯ááºááá¯á· ááŒá¯á¶áá¯á¶áááá«áááºá
- HandlersLocator ááᯠMessageBus á¥ááá¬ááá¯á· áá±á«ááºážááá·áºááŒááºážá
- áá»áœááºá¯ááºááá¯á·ááẠ`SenderInterface` á¡á á¯áá áºáá¯á¡á¬áž SenderLocator ááá¯á· áá±ážááá¯á·áááºáá áá»áœááºá¯ááºáá¡ááŒá±á¡áá±ááœááºá `RedisTransport` á¡áááºážáá»á¬ážá áááºááŸá¬ážáá±á¬áááºážáááºážááŒáá·áº ááŒááºáááºáááºááŸááºáá¬ážáá±á¬á
- MessageBus á¥ááá¬ááá¯á· SenderLocator ááá¯ááá·áºááŒááºážá
MessageBus ááœáẠHandlersLocator á¡ááœááºážááŸá ááá·áºáá»á±á¬áºáá±á¬ ááá¯ááºááœááºáá°áá»á¬ážááᯠááŸá¬ááœá±áᬠáááºááá¯ááºáᬠ`SenderInterface` ááᯠá¡áá¯á¶ážááŒá¯á áááºá áºáá¬áž ( Redis streams áá»á¬áž) ááᯠá¡áá¯á¶ážááŒá¯á MessageBus ááœáẠ`->dispatch()` áááºážáááºážáá áºáᯠááŸááá«áááºá
container configuration (á€ááá á¹á ááœáẠphp-di) ááœááºá á€á¡á á¯á¡áá±ážáá áºáá¯áá¯á¶ážááᯠá€áá²á·ááá¯á· configure áá¯ááºááá¯ááºáá«áááºá
CONTAINER_REDIS_TRANSPORT_SECRET => function (ContainerInterface $c) {
return new RedisTransport(
$c->get(CONTAINER_REDIS_STREAM_CONNECTION_SECRET),
$c->get(CONTAINER_SERIALIZER))
;
},
CONTAINER_REDIS_TRANSPORT_LOG => function (ContainerInterface $c) {
return new RedisTransport(
$c->get(CONTAINER_REDIS_STREAM_CONNECTION_LOG),
$c->get(CONTAINER_SERIALIZER))
;
},
CONTAINER_REDIS_STREAM_RECEIVER_SECRET => function (ContainerInterface $c) {
return new RedisReceiver(
$c->get(CONTAINER_REDIS_STREAM_CONNECTION_SECRET),
$c->get(CONTAINER_SERIALIZER)
);
},
CONTAINER_REDIS_STREAM_RECEIVER_LOG => function (ContainerInterface $c) {
return new RedisReceiver(
$c->get(CONTAINER_REDIS_STREAM_CONNECTION_LOG),
$c->get(CONTAINER_SERIALIZER)
);
},
CONTAINER_REDIS_STREAM_BUS => function (ContainerInterface $c) {
$sendersLocator = new SendersLocator([
AppMessagesSecretJsonMessages::class => [CONTAINER_REDIS_TRANSPORT_SECRET],
AppMessagesDaemonLogMessage::class => [CONTAINER_REDIS_TRANSPORT_LOG],
], $c);
$middleware[] = new SendMessageMiddleware($sendersLocator);
return new MessageBus($middleware);
},
CONTAINER_REDIS_STREAM_CONNECTION_SECRET => function (ContainerInterface $c) {
$host = 'bu-02-redis';
$port = 6379;
$dsn = "redis://$host:$port";
$options = [
'stream' => 'secret',
'group' => 'default',
'consumer' => 'default',
];
return Connection::fromDsn($dsn, $options);
},
CONTAINER_REDIS_STREAM_CONNECTION_LOG => function (ContainerInterface $c) {
$host = 'bu-02-redis';
$port = 6379;
$dsn = "redis://$host:$port";
$options = [
'stream' => 'log',
'group' => 'default',
'consumer' => 'default',
];
return Connection::fromDsn($dsn, $options);
},
SendersLocator ááœáẠááá°áá®áá±á¬ áááºáá±á·áá»áºááŸá áºáá¯á¡ááœáẠááá°áá®áá±á¬ "áááºáá°ááá¯á·áá±á¬ááºáá±áž" ááᯠáá»áœááºá¯ááºááá¯á· áááºááŸááºáá±ážáá¬ážááŒá®áž áá áºáá¯á á®ááœáẠáááºááá¯ááºáᬠáá¯ááºááœáŸáá·áºááŸá¯áá»á¬ážááŸáá·áº áááºážáááá¯ááºááá¯ááºáá»áááºáááºááŸá¯ááŸáááŒá±á¬ááºáž á€áá±áá¬ááœáẠáááºááœá±á·ááŒááºááá¯ááºáá«áááºá
á¡á±á¬ááºáá±á¬áºááŒáá«áááºá
áºáá¬ážááᯠá¡áá¯á¶ážááŒá¯á á¡áá»ááºážáá»ááºážáááºááœááºáá±áá±á¬ daemons áá¯á¶ážáŠážááᯠááá¯ááºááŒáá¬ážááá·áº áá®ážááŒá¬ážááá¯ááºááŒááá±á¬áá»ááºáá
áºáᯠááŒá¯áá¯ááºáá²á·áááº-
áá«áá±ááá·áº á á¬ážáá¯á¶ážáá°áá áºáŠážááᯠáááºááá¯áá¯á¶á á¶áááºáá±á¬ááºááá¯ááºáá²ááá¯áá¬ááᯠáá«ááŒáááºá
use AppMessagesDaemonLogMessage;
use SymfonyComponentMessengerHandlerHandlerDescriptor;
use SymfonyComponentMessengerHandlerHandlersLocator;
use SymfonyComponentMessengerMessageBus;
use SymfonyComponentMessengerMiddlewareHandleMessageMiddleware;
use SymfonyComponentMessengerMiddlewareSendMessageMiddleware;
use SymfonyComponentMessengerTransportSenderSendersLocator;
require_once __DIR__ . '/../vendor/autoload.php';
/** @var PsrContainerContainerInterface $container */
$container = require_once('config/container.php');
$handlers = [
DaemonLogMessage::class => [
new HandlerDescriptor(
function (DaemonLogMessage $m) {
error_log('DaemonLogHandler: message handled: / ' . $m->getMessage());
},
['from_transport' => CONTAINER_REDIS_TRANSPORT_LOG]
)
],
];
$middleware = [];
$middleware[] = new HandleMessageMiddleware(new HandlersLocator($handlers));
$sendersLocator = new SendersLocator(['*' => [CONTAINER_REDIS_TRANSPORT_LOG]], $container);
$middleware[] = new SendMessageMiddleware($sendersLocator);
$bus = new MessageBus($middleware);
$receivers = [
CONTAINER_REDIS_TRANSPORT_LOG => $container->get(CONTAINER_REDIS_STREAM_RECEIVER_LOG),
];
$w = new SymfonyComponentMessengerWorker($receivers, $bus, $container->get(CONTAINER_EVENT_DISPATCHER));
$w->run();
á¡ááºááá®áá±ážááŸááºážáá áºáá¯ááœáẠá€á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá
áá»áœááºá¯ááºááá±á¬ááºááœááºááœáẠáááºá áºáá¬ážááᯠá¡áá±á¬ááºá¡ááẠáá±á¬áºááŒá®ážáá±á¬ááºá á¡ááá·áºáá»á¬ážááᯠáá áºááŒáá¯ááºáááºáááºáž áá°áá®áá±á¬ á¡áááá·áºáá±ážáá»ááºáá±á¬ááºážá០ááœá²áá¯ááºááŒá®áž áá®ážááŒá¬áž ááá¯ááºááœááºáá°áá»á¬ážááᯠááŒá¯áá¯ááºáá²á·ááŒá®áž áááºážááá¯á·áá áºáŠážá á®ááẠáááºážááá¯á·á á¡áá¬áá»á¬ážááᯠáá¯ááºáá±á¬ááºáááºá
áá±áá¬áá±á·á áºááá¯á· áááºááá¯ááºá¡áá áºáá áºáᯠáá±á«ááºážááá·áºááŒááºážá¡ááœáẠááá¯ááºááá¯ááºážááẠá€áá²á·ááá¯á· ááŒá áºáááº-
ááŒá®ážáá±á¬á· áá»ááºáá»ááºážááá¯áááá¯áá²á áá¯ááºáá±á¬ááºáá»ááºá¡áá
áºááœá± áááºááá·áºááá¯á·á á¥ááá¬á Rss ááᯠáá¯ááºáá°ááŒá®áž ááœá²ááŒááºážá
áááºááŒá¬ááá¯á·á ááá¯ááœááºáá¬áááºá áá¬ááŒá
áºááá¯á·áá²ááá¯áá±á¬á· á€áá¯ááºáááºážá
ááºááẠáá°áááºážá¡ááŒá±á¬ááºážá¡áá¬ááá¯áááºáž ááá¯á¡ááºáááºá ááá¯á·áá±á¬áẠWebsiteIndexHistoryPersistor áá²á·ááá¯á· RSS ááá·áºááºáá¯ááºáá°áá° ááá¯ááºááœááºáá°ááẠ"á¡ááŒá±á¬ááºážá¡áá¬/HtmlContent" áááºáá±á·áá»áºááᯠá
á¬áááºážááœááºážáᬠáááºážááᯠáá¯ááºáá±á¬ááºááŒá®áž áááºážáááá¯ááºááá¯ááºážáá
áºáá»áŸá±á¬áẠá¡ááá¯ááŸááá±á¬ áááºáá±á·áá»áºááᯠáááºáá¶áá±ážááá¯á·áááºá
á¡áá¯á¶ážááœááºá áá»áœááºá¯ááºááá¯á·ááẠááá¯á¡ááºáá±á¬á¡áááºážá¡ááŒá
áºáá»á¬ážááŸáá·áºáᬠáá»áááºáááºááŸá¯ááᯠááááºážááááºážáá¬ážááá·áº daemon áá»á¬ážá
áœá¬ááŒáá·áº á¡áá¯á¶ážáááºáá²á·áááºá á¥ááᬠáááºááá¯áž áá»á±á¬ááºáá¶áá¬áž á¡ááŒá±á¬ááºážá¡áá¬á¡ááœááºá¡ááºáá¬áááºááá¯á·ááœá¬ážáááºááá¯á¡ááºááá·áºááá¯ááºááœááºáá°á¡á¬ážáá¯á¶ážááŸáá·áº daemon áá«ááŸááááºá áááºáá±áá«á áá±áá¬áá±á·á
áºááá¯á·áá»áááºáááºááŸá¯áá
áºáá¯ááŸááááºá
ááá¯á¡áá«ááœááºá áá±áá¬áá±á·á
áºááŸááœá±ážáá»ááºááá·áºá¡á
á¬ážá persister ááŸááá·áºááœááºážááŒá®ážáá±á¬áẠááá¯á¡ááºáá±á¬ ids áá»á¬ážááᯠá
áááºáááºá
á¬ážáá°á¡á¬ážáá¯á¶ážáá¶ááá¯á· bus ááŸáááá·áº ááá¯ážááŸááºážá
áœá¬ ááá¯á·áá±ážáá«áááºá
source: www.habr.com