ã¡ãã»ãŒãžãã¥ãŒã®ä»çµã¿ â åä»ãšäœæ¥ãåãããä»äºã®ç®±ã
åä»ãšå®æã¯ãå¥ã®ã¿ã€ãã³ã°
ãŸãã¯ã3ä»¶ã®ä»äºãç®±ãžå ¥ãã
ã¬ããŒãäœæã®ãããªåŸ
ã¡æéã®ããåŠçã§ã¯ãåä»ãšå®éã®äœæ¥ãåãããšæµããçè§£ãããããªããŸããPython 3ã䜿ãããªããæ¬¡ãqueue-demo.pyãšããŠä¿åããpython queue-demo.pyã§è©ŠããŠã¿ãŸãããã
from queue import Queue
jobs = Queue()
for number in (1, 2, 3):
jobs.put(f"report-{number}")
print("åä»ä»¶æ°:", jobs.qsize())
for _ in range(3):
job = jobs.get()
print("åŠçãã:", job)
jobs.task_done()
jobs.join()
print("ãã¹ãŠå®äº")
åä»ä»¶æ°: 3
åŠçãã: report-1
åŠçãã: report-2
åŠçãã: report-3
ãã¹ãŠå®äº
ãã®äŸã¯1ã€ã®ããã°ã©ã å ã®åŸ ã¡è¡åã§ããå¥ã®ãµãŒããŒãžã®é éãæ°žç¶ä¿åãé害æã®åŸ©æ§ãè¡ãRabbitMQçã®å®è£ ã§ã¯ãããŸãããtask_doneããããã¯ãŒã¯è¶ãã®ACKã§ã¯ãªãããã®Queueå ã§ä»äºã®å®äºãæ°ããæäœã§ãã
ãåãä»ããããšãã§ããããåãã
å³ã§ã¯ãç»é¢ãããã¬ããŒãAãäœãããšããæ å ±ãæž¡ããäœæ¥ä¿ãå®éã«äœããŸããç»é¢ã«å仿žã¿ãšè¡šç€ºããŠããææç©ãããååšãããšã¯éããŸãããäœæ¥IDã§é²æãçµæã確èªããå ¥å£ãå¿ èŠã§ãã
ãããŒã«ãŒã䜿ãå Žåããéä¿¡åŽãåãä»ããŠããã£ã確èªãšãåä¿¡åŽãåŠçãã確èªã¯å¥ã§ããRabbitMQã§ã¯Publisher ConfirmãšConsumer Acknowledgementãåºå¥ããŸããå¿ èŠãªåŠçåã«å®äºæ±ãã«ãããšãé害æã«ä»äºã倱ããããããããŸãã
é çªã»éè€ã»å詊è¡ã確èªãã
| æ°ã«ãªãããš | 確èªããããš |
|---|---|
| é çª | å ¥ããé ãé éé ãå®äºé ã®ã©ããéèŠããè€æ°Consumerãåé ä¿¡ã®åœ±é¿ |
| éè€ | åãä»äºIDãããäžåºŠåŠçããŠããä¿åçµæãå¢ããªãã |
| 倱æ | å詊è¡ã®æ¡ä»¶ã»äžéã倱æã確èªããå Žæãæ»çãç¥ãç£èŠ |
| ä¿å | ãããŒã«ãŒããã¥ãŒãã¡ãã»ãŒãžçã®èšå®ãšãæ±ãã埩æ§ã®ç¯å² |
RabbitMQã®éåžžã®ãã¥ãŒã¯é åºãä¿ãšããšããŸãããåªå 床ãåé ä¿¡ãè€æ°ã®Consumerãªã©ã§èŠ³æž¬ããé çªãå€ãããŸãããããã¬ã¿ãŒçšã®èšå®ãèªåçã«äœã§ãä»ãããã§ã¯ãããŸããã
ããå°ã詳ããïŒKafkaãšä¿èšŒã®å¢ç
Kafkaã¯èšé²ãããŒãã£ã·ã§ã³ã«äžŠã¹ãConsumerãèªã¿åãäœçœ®ã管çããŸããä¿ææéãã³ã³ãã¯ã·ã§ã³çã®èšå®ããããæ¶è²»ãããå¿ ãå³åé€ããæ¹åŒã§ããæ°žä¹ ä¿åã®ä¿èšŒã§ããããŸããã
Kafkaå ã®ãã©ã³ã¶ã¯ã·ã§ã³ãKafka Streamsã§ã®exactly-onceã®æå³ãšãå€éšãµãŒãã¹ãžå¯äœçšãèµ·ããæå³ãåããŸããããšãã°ã¡ãŒã«é éãå¥DBãžã®ä¿åã«ã¯ããã®å€éšãšã®å調ãå¿ èŠã§ããåªçæ§ã®ããŒãå¶çŽãçµæãšåŠçäœçœ®ã®èšé²ãªã©ãç®çã«åãããŠèšèšããŸãã
ð§ ãã³ã®ã³å çã®ãŸãšãïŒãã¡ãã»ãŒãžãã¥ãŒãã£ãŠåºãŠããããåãä»ããä»äºããå¥ã®äœæ¥ä¿ãžæž¡ãç®±ããšæãã°ã ãããOKïŒ
äœæ¥ä¿ã¯ã¹ã¬ããããŒã«ã®ä»çµã¿ãéç¥ãåãåãå ¥å£ã¯Webhookã®ä»çµã¿ã§ç¶ããŠèŠãŠã¿ãŸãããã
åèè³æ
- PythonïŒqueue â Queueã®put/getã»task_done/joinã®æå³
- RabbitMQïŒQueues â ãã¥ãŒã®é åºãšåé ä¿¡ã»è€æ°Consumerçã®æ¡ä»¶
- RabbitMQïŒConsumer Acknowledgements and Publisher Confirms â Consumerã®ACKãšéä¿¡åŽã®ç¢ºèªã»åé ä¿¡
- Apache Kafka 4.0ïŒDesign â ä¿åãšConsumeräœçœ®ã»ãã©ã³ã¶ã¯ã·ã§ã³ã»å€éšã®exactly-onceã®æ¡ä»¶