ããã«ã¡ã¯ãããã«ïŒ ç§ãéããæç§æžã»åèæžã®ç¥èãå
±æããã RabbitMQ
ãããŠçãæšå¥šäºé
ãšçµè«ã«åçž®ããŸãã
ç®æ¬¡
- ã©ãããMQã ããŒã 1. ã¯ããã«ã ErlangãAMQPãRPC
- ã©ãããMQã ããŒã 2. 亀æã«ã€ããŠç解ãã
- ã©ãããMQã ããŒã 3. ãã¥ãŒãšãã€ã³ãã£ã³ã°ã«ã€ããŠ
- ã©ãããMQã ããŒã 4. ã¡ãã»ãŒãžãšãã¬ãŒã ãšã¯äœããç解ãã
- ã©ãããMQã ããŒã 5: ã¡ãã»ãŒãžã®ãããªãã·ã¥ãšæ¶è²»ã®ããã©ãŒãã³ã¹
- ã©ãããMQã ããŒã 6. Federation ããã³ Shovel ã¢ãžã¥ãŒã«ã®ã¬ãã¥ãŒ
- ã©ãããMQã ããŒã 7. ã³ãã¯ã·ã§ã³ãšã·ã£ãã«ã«ã€ããŠã®è©³çŽ°
- ã©ãããMQã ããŒã 8. .NET ã® RabbitMQ
- ã©ãããMQã ããŒã 9. ã¢ãã¿ãªã³ã°
AMQP ã«ã€ããŠç°¡åã«èª¬æããŸã
AMQP (Advanced Message Queuing Protocol) ã¯ãã·ã¹ãã ã³ã³ããŒãã³ãéã§ã¡ãã»ãŒãžãéä¿¡ããããã®ãªãŒãã³ ãããã³ã«ã§ãã åºæ¬çãªèãæ¹ã¯ãåã ã®ãµãã·ã¹ãã (ãŸãã¯ç¬ç«ããã¢ããªã±ãŒã·ã§ã³) ã AMQP ãããŒã«ãŒãä»ããŠä»»æã®æ¹æ³ã§ã¡ãã»ãŒãžã亀æã§ãããšãããã®ã§ããAMQP ãããŒã«ãŒã¯ãã«ãŒãã£ã³ã°ãå®è¡ããå Žåã«ãã£ãŠã¯é ä¿¡ãä¿èšŒããããŒã¿ ã¹ããªãŒã ãé åžããå¿ èŠãªã¡ãã»ãŒãž ã¿ã€ãããµãã¹ã¯ã©ã€ãããŸãã
ãããã³ã« AMQP
ã§ã¯ XNUMX ã€ã®æŠå¿µãå°å
¥ãããŠããŸãã
exchange
(亀æãã€ã³ããŸãã¯äº€æ) - ã¡ãã»ãŒãžãéä¿¡ãããŸãã 亀æãã€ã³ã ã¡ãã»ãŒãžãé åžããŸã XNUMX ã€ä»¥äžã®ãã¥ãŒã«ãããŸãã 圌女 ã¡ãã»ãŒãžããã¥ãŒã«ã«ãŒãã£ã³ã°ãã äœæããããªã³ã¯ã«åºã¥ã㊠(binding
) 圌ãšåã®équeue
(ãã¥ãŒ) - ãã£ã¹ã¯ãŸã㯠RAM å ã®ããŒã¿æ§é ã ã¡ãã»ãŒãžãžã®ãªã³ã¯ãä¿åããã¡ãã»ãŒãžã®ã³ããŒãæäŸããŸãconsumers
ïŒæ¶è²»è ã®çæ§ãžïŒbinding
(ãã€ã³ãã£ã³ã°) - ãšããã«ãŒã« 亀æãã€ã³ãã«ãããã®ã¡ãã»ãŒãžãã©ã®ãã¥ãŒã«å ¥ããããæ瀺ããŸãã
ãããã³ã«ã¯æäžäœã§å®è¡ãããŸã
Erlang ã«ã€ããŠç°¡åã«èª¬æããŸã
ãããžã§ã¯ãã®ãœãŒã¹ ã³ãŒãã¯æ¬¡ã®ãªããžããªã«ãããŸãã
Erlang
å瀟ãéçºããEricsson
1980 幎代åã°ã«ã¯ã99,999% ã®çšŒåæéãå¿ èŠãšããã¢ããªã±ãŒã·ã§ã³åãã®åæ£åãèé害æ§ããªã¢ã«ã¿ã€ã ã·ã¹ãã ãšããŠäœ¿çšãããŸãããErlang
ããŸããŸãªç£æ¥ãææ°ã®ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããŠããŸããFacebookã19åãã«ã§è²·åããWhatsAppã¢ãŒããã¯ãã£
RabbitMQ ã«ã€ããŠç°¡åã«èª¬æããŸã
RabbitMQ
ãããã³ã«ãå®è£
ããã³è£è¶³ããŸã AMQP
.
ã®ã¡ãã»ãŒãžã³ã° ã¢ãã«ã®äž»ãªã¢ã€ã㢠RabbitMQ
äºã¯ producer
(ãããªãã·ã£ãŒ) ã¯ã¡ãã»ãŒãžããã¥ãŒã«çŽæ¥éä¿¡ããŸããã å®éãéåžžã«å€ãã®å Žåãçºè¡è
ã¯ãã¡ãã»ãŒãžããã¥ãŒã«é
ä¿¡ããããã©ããããç¥ããŸããã
代ããã«ãçºè¡è ã¯ã¡ãã»ãŒãžã亀æã«éä¿¡ããããšããã§ããŸããã äžæ¹ã§ã¯ããšã¯ã¹ãã§ã³ãžã¯ãããªãã·ã£ãŒããã¡ãã»ãŒãžãåä¿¡ããä»æ¹ã§ã¯ã¡ãã»ãŒãžããã¥ãŒã«éä¿¡ããŸãã 亀æåŽã¯ãåä¿¡ããã¡ãã»ãŒãžãã©ãåŠçããããæ£ç¢ºã«ææ¡ããŠããå¿ èŠããããŸãã ç¹å®ã®ãã¥ãŒã«è¿œå ããå¿ èŠããããŸãã? è€æ°ã®ãã¥ãŒã«è¿œå ããå¿ èŠããããŸãã? ãŸãã¯ãã¡ãã»ãŒãžãç¡èŠããå¿ èŠããããŸãã
ç°¡åãªäœæ¥ RabbitMQ
ã¯æ¬¡ã®ããã«èª¬æã§ããŸãã
- ãããªãã·ã£ãŒã¯ç¹å®ã®ãšã¯ã¹ãã§ã³ãžã«ã¡ãã»ãŒãžãéä¿¡ããŸã
- ã¡ãã»ãŒãžãåä¿¡ãã亀ææ©ã¯ãã¡ãã»ãŒãžãšãã¥ãŒã®éã®ãã€ã³ãã£ã³ã° ã«ãŒã«ã«åŸã£ãŠãã¡ãã»ãŒãžã XNUMX ã€ä»¥äžã®ãã¥ãŒã«ã«ãŒãã£ã³ã°ããŸãã
- ãã¥ãŒã«ã¯ããã®ã¡ãã»ãŒãžãžã®åç §ãä¿åãããŸãã ã¡ãã»ãŒãžèªäœã¯ RAM ãŸãã¯ãã£ã¹ã¯ã«ä¿åãããŸã
- ã³ã³ã·ã¥ãŒããŒããã¥ãŒããã¡ãã»ãŒãžãåä¿¡ããæºåãã§ãããšããµãŒããŒã¯ãªã³ã¯çµç±ã§ã¡ãã»ãŒãžã®ã³ããŒãäœæãã
- ã³ã³ã·ã¥ãŒããŒã¯ã¡ãã»ãŒãžãåä¿¡ãããããŒã«ãŒã«ç¢ºèªãéä¿¡ããŸãã
- ãããŒã«ãŒã¯ç¢ºèªãåãåããšãã¡ãã»ãŒãžã®ã³ããŒããã¥ãŒããåé€ããŸãã ãã®åŸãRAMãšãã£ã¹ã¯ããåé€ããŸã
RPC
ããã»ã¹ RabbitMQ
ã ããšãã°ãã¯ã©ã€ã¢ã³ããšã®æ¡ä»¶ã«é¢ããæåã®è©±ãåãã RabbitMQ
ãç¹å®ã®ããã»ã¹ã瀺ããŸã RPC
ã ãã®äžé£ã®æµããå®äºãããšã RabbitMQ
ã¯ã©ã€ã¢ã³ãããã®ãªã¯ãšã¹ããåãå
¥ããæºåãæŽããŸãã
ä»æ§ã«ããããŸã AMQP
ã¯ã©ã€ã¢ã³ããšãµãŒããŒã®äž¡æ¹ãã³ãã³ããçºè¡ã§ããŸãã ããã¯ãã¯ã©ã€ã¢ã³ãããµãŒããŒãšã®éä¿¡ãåŸ
æ©ããŠããããšãæå³ããŸãã ã³ãã³ãã¯ã¯ã©ã¹ãšã¡ãœããã§ãã äŸãã°ã Connection.Start
â ã¡ãœããåŒã³åºã Start
ã¯ã©ã¹ Connection
.
æ¥ç¶ãšãã£ãã«
ãã®ãããªã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®æ å ±äº€æã®ããã«ã ãã£ã³ãã«ã ãã£ãã«ã¯å éšã§äœæãããŸã ç¹å®ã®æ¥ç¶ã åãã£ã³ãã«ã¯ä»ã®ãã£ã³ãã«ããéé¢ãããŠããŸãã åæã®å Žåãå¿çãåä¿¡ãããŸã§æ¬¡ã®ã³ãã³ããå®è¡ã§ããŸããã
ã³ãã³ãã䞊è¡ããŠéä¿¡ã§ããããã«ããã«ã¯ãè€æ°ã®ãã£ãã«ãéãå¿
èŠããããŸãã åãã£ãã«ã¯åå¥ã«äœæãããŸã Erlang
ããã»ã¹ã XNUMX ã€ã®æ¥ç¶ã«è€æ°ã®ãã£ãã«ãå«ããããšãã§ããŸã (
ã䜿çšããŠæ¥ç¶ãšãã£ãã«ãäœæããç°¡åãªäŸ
// ...
private void TryConnect()
{
var factory = new ConnectionFactory()
{
HostName = "host_name",
UserName = "user_name",
Password = "p@ssword",
// ÐклÑÑеМОе авÑПЌаÑОÑекПгП вПÑÑÑаМПвлеМОÑ
// ÑÐŸÐµÐŽÐžÐœÐµÐœÐžÑ Ð¿ÐŸÑле ÑбПев ÑеÑО
AutomaticRecoveryEnabled = true
};
_connection = factory.CreateConnection();
}
// ...
public void CreateChanel()
{
_channel = _connection.CreateModel();
// other options
}
æäœããšã«æ°ããæ¥ç¶ãéãããšã¯åŒ·ããå§ãããŸããã ã³ã¹ãé«ã«ã€ãªããã ãã£ãã«ãæ°žç¶çã§ããå¿ èŠããããŸãããå€ãã®ãããã³ã« ãšã©ãŒã«ãããã£ãã«ãéããããããããã£ãã«ã®åç¶æéã¯æ¥ç¶ã®åç¶æéãããçããªãå¯èœæ§ããããŸãã
RabbitMQ ã¯ã©ãã§äœ¿çšãããŸãã?
ãã€ã¯ããµãŒãã¹ã®ã³ã³ããã¹ãã§ã¯ããããã³ã« AMQP
ãšãã®å®è£
RabbitMQ
ãã䜿ãããã®ã¯ éåæ察話 ãµãŒãã¹éã
ã³ã³ããã¹ã㧠IIOT
ãããã³ã« AMQP
ãšãã®å®è£
RabbitMQ
ãµãŒããŒé (ãµãŒããŒé) ã®ããŒã¿äº€æã«äœ¿çšãããŸãã ãã©ã°ã€ã³ãå©çšãã
次ã®èšäºã§ã¯ãExchange ã«ã€ããŠããã«è©³ããç解ããŠãããŸãã
ãªãã¡ã¬ã³ã¹
åºæïŒ habr.com