MS_RabbitMQ - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- æ»ãïŒIoTé¢é£ã®éä¿¡ãããã³ã«ïŒ
- Mosquitto
- RabbitMQ
- AMQP ãããŒã«ãŒã® OSS
- MQTT ãããã³ã«ãµããŒãã®ãã©ã°ã€ã³ãããã
è£è¶³ïŒRabbitMQ ã®äœçœ®ä»ãïŒ: äžèšã§èšãã°
**ãèªåã§ç«ãŠãããæ±çšã¡ãã»ãŒãž ãããŒã«ãŒã**ã§ããã
æ¬ Wiki ã®ä»ã®ã¡ãã»ãŒãžã³ã°æè¡ãšã®é¢ä¿ã¯æ¬¡ã®ãšããã
RabbitMQ Azure Service Bus Mosquitto äž»ãããã³ã« AMQP 0-9-1ïŒïŒ MQTT/STOMP ãã©ã°ã€ã³ïŒ AMQP 1.0 MQTT éçš èªåã§æ§ç¯ã»éçš ãããŒãžã èªåã§æ§ç¯ çšé æ±çšïŒæ¥å飿ºãéåæåŠçïŒ æ¥å飿º IoT ããã€ã¹ è²»çš ãµãŒã代ã®ã¿ åŸé課é ãµãŒã代ã®ã¿ ç¹åŸŽ Exchange ã«ããæè»ãªã«ãŒãã£ã³ã° äŒæ¥åãæ©èœãå å® è»œé ãªããAMQP 0-9-1 ãš AMQP 1.0 ã¯å¥ç©ã§ãã
ïŒååã¯åãã ãäºææ§ãç¡ãïŒãAMQP 0-9-1 ⊠RabbitMQ ãå®è£ ãExchange / Queue / Binding ãšãã ãããŒã«ãŒ ã¢ãã«ããããã³ã«ãèŠå®ãã â 倧ããåèšèš AMQP 1.0 ⊠ISO/IEC 19464 ã®åœéæšæºã ããããŒã«ãŒã®å éšã¢ãã«ã¯èŠå®ããªããïŒåŸè¿°ïŒæ¬æã®ããããŒã«ãŒã¢ãã«ãã®ç¯ã§
**ãAMQP 1.0 ã§åé€ãããã®ã§ãã³ã¬ã¯ãçŽç²ã«ãRabbitMQ ã®è©±ã**ãš
泚èšãããŠããã®ã¯ããã®çµç·¯ã«ããã
- Erlang
- ã€ã³ã¹ããŒã«ïŒæ¢å®å€ïŒ
- Erlang Programming Language
https://www.erlang.org/downloads
- Erlang Programming Language
- ç°å¢å€æ°èšå®
äžèŠã ã£ãã
- ã€ã³ã¹ããŒã«ïŒæ¢å®å€ïŒ
- RabbitMQ
- ã€ã³ã¹ããŒã«ïŒæ¢å®å€ïŒ
- Installing on Windows â RabbitMQ
https://www.rabbitmq.com/install-windows.html
- Installing on Windows â RabbitMQ
- ã€ã³ã¹ããŒã«ïŒæ¢å®å€ïŒ
è£è¶³ïŒãªã Erlang ãå¿ èŠãªã®ãïŒ: RabbitMQ ã¯
Erlang/OTP ã§å®è£ ãããŠããããããã®å®è¡ç°å¢ãèŠããããã¯åãªãå®è£ ã®éœåã§ã¯ãªããèšèšäžã®å¿ ç¶ã§ããã
Erlang ã®ç¹æ§ RabbitMQ ã§ã®äŸ¡å€ 軜éããã»ã¹ã倧éã«æ±ãã æ¥ç¶ã»ãã¥ãŒããšã«ããã»ã¹ãå²ãåœãŠããã ããã»ã¹ãç¬ç«ïŒã¡ã¢ãªãå ±æããªãïŒ 1 ã€ãèœã¡ãŠãä»ã«æ³¢åããªã ã¹ãŒããŒãã€ã¶ã«ããèªååèµ·å é害ããã®èªå·±å埩 忣ãèšèªæ©èœ ã¯ã©ã¹ã¿ãªã³ã°ãèªç¶ã«å®è£ ã§ãã ã€ãŸãã**ã倧éã®æ¥ç¶ãæããäžéšãå£ããŠãå šäœã¯æ¢ãŸããªãã**ãšãã
ã¡ãã»ãŒãž ãããŒã«ãŒã®èŠä»¶ã« Erlang ãé©åããŠãããå®åäžã®æ³šæç¹ãšããŠã
- Erlang ãš RabbitMQ ã®ããŒãžã§ã³ã«ã¯å¯Ÿå¿é¢ä¿ããã
ïŒå ¬åŒã®äºææ§äžèЧã確èªããïŒã- Erlang ãå ã«ã€ã³ã¹ããŒã«ããå¿ èŠãããã
- Windows ã§ã¯
ERLANG_HOMEãå¿ èŠã«ãªãå Žåããã
ïŒæ¬æã§ã¯ãäžèŠã ã£ãããšããããç°å¢ã«ããïŒãšããç¹ãæããããã
ãªããçŸåšã¯ Docker ã§åããã®ãæãæè»œã§ã
Erlang ã®ããŒãžã§ã³ç®¡çããè§£æŸããããdocker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
-managementã¿ã°ã䜿ãã°åŸè¿°ã®ç®¡çç»é¢ãæå¹åæžã¿ã§èµ·åããã
- ãµãŒãã¹ãšããŠã€ã³ã¹ããŒã«ãããã
- èµ·åïŒã¡ãã¥ãŒããRabbitMQ Service - startãéžæ
- 忢ïŒã¡ãã¥ãŒããRabbitMQ Service - stopãéžæ
- rabbitmqadminã§åäœç¢ºèªã
- RabbitMQ.Clientã§åäœç¢ºèªã
ç§»è¡ã¡ã¢: äžèš 4 é ç®ã¯åå žã§ãèŠåºãã®ã¿ã§ãæ¬æãååšããªãã
- AzureïŒAzure Service BusïŒããªããžæ©èœïŒ
- AzureïŒAmazon MQ for RabbitMQ
- GCPïŒCloud Pub/SubïŒ
ç§»è¡ã¡ã¢ïŒæ£èª€ïŒ: 2 è¡ç®ã®ãAzureïŒAmazon MQ for RabbitMQãã¯ã
Amazon MQ 㯠AWS ã®ãµãŒãã¹ã§ãããã
ãAWSïŒAmazon MQ for RabbitMQãã®èª€ããšå€æãããã
åå žã©ããã«èšèŒããããã§ãããã«èšæ£ãèšãã
è£è¶³ïŒãããŒãžãã§ RabbitMQ ã䜿ãéžæè¢ïŒ: çŸåšã®äž»ãªéžæè¢ã¯æ¬¡ã®ãšããã
æäŸ ãµãŒãã¹ å 容 AWS Amazon MQ for RabbitMQ RabbitMQ ãã®ãã®ããããŒãžãã§æäŸ Azure ïŒ RabbitMQ ã®ãããŒãžãæäŸã¯ç¡ãïŒVM / AKS ã§èªåæ§ç¯ããŸã㯠Service Bus ã«ç§»è¡ïŒ GCP ïŒ åäžïŒCloud Pub/Sub ã¯å¥ç©ïŒ ãµãŒãããŒã㣠CloudAMQP åã¯ã©ãŠãäžã§ RabbitMQ ããããŒãžãæäŸ Azure ã§ RabbitMQ ã䜿ãããå Žåã
æ¹é å 容 Service Bus ã«ç§»è¡ãã AMQP 1.0 ãªã®ã§ãã¯ã©ã€ã¢ã³ãåŽã®æžãæããèŠã AKS / VM ã§èªåéçš RabbitMQ ã®ãŸãŸãéçšã¯èªåæã¡ Container Apps æè»œã«èŒããããããæ°žç¶åãšå¯çšæ§ã®èšèšãèŠã ãšãã倿ã«ãªãã
ãªããCloud Pub/Sub 㯠Pub/Sub å°çšã§ããã
RabbitMQ ã® Exchange ã®ãããªæè»ãªã«ãŒãã£ã³ã°ã¯æããªãã
ãïŒããä»ããŠãããšãããçŽæ¥ã®å¯Ÿå¿ç©ã§ã¯ãªãã
-
èšå®
-
ã¡ãã¥ãŒããRabbitMQ Command Prompt (sbin dir)ãéžæ
-
以äžã® 2 ã€ã®ã³ãã³ããå®è¡ããã
rabbitmq-plugins enable rabbitmq_managementrabbitmq-plugins enable rabbitmq_tracing
-
-
ã¢ã¯ã»ã¹
- HTTPS ã§ã¯ãªã HTTP
http://127.0.0.1:15672/ - ã¢ã«ãŠã³ãã¯
guest/guest
- HTTPS ã§ã¯ãªã HTTP
-
åè
- RabbitMQ ã®ã€ã³ã¹ããŒã«ãšç®¡çç»é¢ã®æå¹å (MacOSX/Linux/Windows) - Qiita
https://qiita.com/AKB428/items/a2662fbb624ce7659025
- RabbitMQ ã®ã€ã³ã¹ããŒã«ãšç®¡çç»é¢ã®æå¹å (MacOSX/Linux/Windows) - Qiita
è£è¶³ïŒç®¡çç»é¢ã¯æ¬çªã§ãã®ãŸãŸå ¬éããªãïŒ: 管çç»é¢ã¯
ãã¥ãŒã®äžèº«ã®é²èЧã»åé€ããŠãŒã¶ç®¡çãŸã§ã§ãã匷åãªæ©èœã§ããã
泚æ å 容 HTTPïŒå¹³æïŒã§ãã æ¬æã®ãšããæ¢å®ã¯ HTTPãèªèšŒæ å ±ãå¹³æã§æµãã guest/guest æ¢å®ã®ãŸãŸãåé€ãããããã¹ã¯ãŒãã倿Žãã 15672 çªã®å ¬é ã€ã³ã¿ãŒãããã«æããªã 察åŠãšããŠã¯ã
management.ssl.portã§ HTTPS åããã- ãªããŒã¹ ãããã·ã®èåŸã«çœ®ããèªèšŒãåæ®µã§è¡ãã
- ãã¡ã€ã¢ãŠã©ãŒã«ã§ç®¡ç端æ«ããã®ã¿èš±å¯ãã
ãšãã£ãæªçœ®ãåãã
ã¯ã©ãŠãå©çšæã®æ³šæäºé ã®
ãã€ã³ããŠã³ããäžçšæã«éããªããããã®ãŸãŸåœãŠã¯ãŸãããªãã
rabbitmq_tracingãã©ã°ã€ã³ã¯
æµããã¡ãã»ãŒãžã®äžèº«ãèšé²ããæ©èœã§ã
éçºã»èª¿æ»ã«ã¯æçšã ãæ§èœã«åœ±é¿ããæ©å¯æ å ±ãèšé²ãããããã
æ¬çªã§ã¯ç¡å¹ã«ããã®ãååã§ããã
-
æšæºã®ç®¡çããŒã«ã§ vhost äœæã»ãŠãŒã¶äœæã»æš©éä»äžãªã©ã®ç®¡çäœæ¥ãè¡ãã
-
Windows ã®å Žå
以äžãã䜿çšããã-
æ ŒçŽå Žæã¯ä»¥äžã®ãã£ã¬ã¯ããªã
...RabbitMQ Server\rabbitmq_server-x.x.x\sbin -
.bat ãã¡ã€ã«ãšããŠæäŸãããŠããã
rabbitmqctl.bat -
ã¡ãã¥ãŒããRabbitMQ Command Prompt (sbin dir)ãéžæãã.bat ã¯çç¥ããŠå®è¡å¯èœã
rabbitmqctl(.bat) status
-
-
åè
- RabbitMQ 管çã³ãã³ãïŒrabbitmqctlïŒäœ¿ãæ¹ - Qiita
https://qiita.com/tamikura@github/items/5293cda4c0026b2d7022
- RabbitMQ 管çã³ãã³ãïŒrabbitmqctlïŒäœ¿ãæ¹ - Qiita
ç§»è¡ã¡ã¢ïŒäœè£ïŒ: åå žã®ã.batã¯çç¥å¯èœããŠå®è¡å¯èœãã¯
ã.bat ã¯çç¥ããŠå®è¡å¯èœãã®èª€ãã§ããããä¿®æ£ããã
åè¿°ã® rabbitmq-plugins ã§ãã©ã°ã€ã³ãå¶åŸ¡ã§ããã
-
管çç»é¢ã«ä»å±ããããŒã«ïŒREST API ã®ã¯ã©ã€ã¢ã³ãïŒã§ã
Exchange ã Queue ã®äœæãMessage ã®éåä¿¡ãªã©ãè¡ãã -
python ãå¿ èŠã§ãrabbitmqadmin ãã¡ã€ã«ã管çç»é¢ããããŠã³ããŒãããŠã以äžã®ããã«äœ¿çšããã
-
Linux ã®å Žå
rabbitmqadmin ãã¡ã€ã«ã /usr/local/bin ã«ã³ããŒãã$ rabbitmqadmin ...ãµãã»ã³ãã³ã... -
Windows ã®å Žå
rabbitmqadmin ãã¡ã€ã«ãã³ããŒãïŒsbin dir ãè¯ãããšïŒã>python.exe rabbitmqadmin ...ãµãã»ã³ãã³ã...
-
-
Message ã®éåä¿¡
-
åä¿¡
-
äŸ
rabbitmqadmin -u admin -p admin -V my-vhost get queue=my-q ackmode=ack_requeue_true -
åæå€
rabbitmqadmin get queue=my-q ackmode=ack_requeue_true
-
-
éä¿¡
-
äŸ
rabbitmqadmin -u admin -p admin -V my-vhost publish routing_key=my-key exchange=my-exchange payload=test -
åæå€
rabbitmqadmin publish routing_key=my-key exchange=my-exchange payload=test
-
-
-
åè
- Management Command Line Tool â RabbitMQ
https://www.rabbitmq.com/management-cli.html - windows RabbitMQ doesnt have rabbitmqadmin in sbin folder - Stack Overflow
https://stackoverflow.com/questions/43547461/windows-rabbitmq-doesnt-have-rabbitmqadmin-in-sbin-folder
- Management Command Line Tool â RabbitMQ
ç§»è¡ã¡ã¢ïŒäœè£ïŒ: åå žã®ãLinux ã«ã®å Žåãã¯
ãLinux ã®å Žåãã®èª€ãã§ããããä¿®æ£ããã
è£è¶³ïŒ
ackmodeã®æå®ãéèŠïŒ: åä¿¡ã®äŸã«ãã
ackmode=ack_requeue_trueã¯ã
**ãåãåºããããã¥ãŒã«ã¯æ»ãã**ãšããæå®ã§ããã
å€ åäœ ack_requeue_trueäžèº«ãèŠãããæ¶ããªãïŒèª¿æ»åãïŒ ack_requeue_falseåãåºããŠæ¶ãïŒæ¬åœã«æ¶è²»ããïŒ reject_requeue_trueæåŠããŠæ»ã 調æ»ç®çã§ãã¥ãŒãèŠãéã«
ack_requeue_falseã䜿ããšã
æ¬çªã®ã¡ãã»ãŒãžãæ¶ããŠããŸãã
æ¬æãæ¢å®å€ãšããŠãack_requeue_trueãæããŠããã®ã¯
劥åœãªéžæã§ããã
- Command Line Tools â RabbitMQ
https://www.rabbitmq.com/cli.html
-
å Žæ
ã€ã³ã¹ããŒã«åŸãèšå®ãã¡ã€ã«ã¯ååšããªãã®ã§ãå¿ èŠãªããäœæããå¿ èŠãããã-
WindowsïŒ
%APPDATA%\RabbitMQ\rabbitmq.conf C:\Users\xxxxx\AppData\Roaming\RabbitMQ\rabbitmq.conf -
LinuxïŒ
/etc/rabbitmq/rabbitmq.config
-
-
æ°ãã¡ã€ã«
- rabbitmq.conf
- æ°åŒã®æžãæ¹ã
- sysctl æ¹åŒã§èšè¿°ã
- advanced.config
- æ§åŒã®æžãæ¹ã
- æ°ã¹ã¿ã€ã«ã®èšå®åœ¢åŒã§ã¯è¡šçŸã§ããªãéãããèšå®é ç®ã
- rabbitmq.conf
-
æ§ãã¡ã€ã«
- rabbitmq.config
- æ§åŒã®æžãæ¹ã
- Erlang ã®æšæºèšå®ãã¡ã€ã«æžåŒã§èšè¿°ã
- rabbitmq.config
-
åè
- rabbitmq èšå®ãã¡ã€ã«ã¯ã©ãã«ãããŸããïŒ - ja.pays-tarusate.org
https://ja.pays-tarusate.org/377570-where-is-rabbitmq-config-file-IOKVEA
- rabbitmq èšå®ãã¡ã€ã«ã¯ã©ãã«ãããŸããïŒ - ja.pays-tarusate.org
è£è¶³ïŒ3 ã€ã®ãã¡ã€ã«ã®é¢ä¿ïŒ: çŽããããã®ã§æŽçããã
ãã¡ã€ã« æžåŒ äœçœ®ä»ã rabbitmq.confkey = valueïŒsysctl 颚ïŒçŸè¡ã®æšæºãã»ãšãã©ã®èšå®ã¯ãã advanced.configErlang ã®é rabbitmq.confã§æžããªããã®ã ãrabbitmq.configErlang ã®é æ§åœ¢åŒïŒ3.7 以åïŒãçŸåšã¯éæšå¥š äž¡æ¹ãååšããå Žåã¯äž¡æ¹ãèªãŸããïŒ
advanced.configãåŸåã¡ïŒã
åŸæ²ã®ãã¥ãŒããªã¢ã«ã§advanced.configã䜿ã£ãŠããã®ã¯ã
auth_mechanismsã®ãããªãªã¹ãæ§é ã®èšå®ãæ±ã£ãŠããããã§ããããªããWindows ã§ã¯
%APPDATA%é äžãšããç¹ãç¹åŸŽçã§ã
ãµãŒãã¹ãšããŠåãã¢ã«ãŠã³ãã®%APPDATA%ãèŠãããã
ãã°ã€ã³ããŠãããŠãŒã¶ã®ãã©ã«ããšã¯ç°ãªãå Žåãããã
管çç»é¢ã®ãOverview â Config fileãã§
å®éã«èªãŸããŠãããã¹ã確èªããã®ã確å®ã§ããã
-
ãšã¯ã¹ããŒã
rabbitmqadmin export c:\export.json -
ã€ã³ããŒã
rabbitmq.conf ã«ä»¥äžã远èšãããmanagement.load_definitions = c:\import.json
è£è¶³ïŒãã®æ©èœãæ§æç®¡çã®èŠïŒ: ãšã¯ã¹ããŒãããã JSON ã«ã¯
ãŠãŒã¶ãæš©éãvhostãExchangeãQueueãBindingãããªã·ãŒã
ãã¹ãŠå«ãŸãããããã«ããã
çšé å 容 ç°å¢ã®è€è£œ éçºç°å¢ã®æ§æãæ€èšŒã»æ¬çªãžãã®ãŸãŸç§»ã æ§æã®ç管ç JSON ã Git ã«å ¥ããïŒã¯ã©ãŠãã»ã€ã³ãã©èªååïŒ éå®³åŸ©æ§ åæ§ç¯æã«äžçºã§æ»ãã ã³ã³ããå èµ·åæã«å®çŸ©ãèªã¿èŸŒãŸããïŒã€ãã¥ãŒã¿ãã«ãªéçšïŒ ãšããããšãå¯èœã«ãªãã
ãã ãããšã¯ã¹ããŒãã«ã¯ãã¹ã¯ãŒã ããã·ã¥ãå«ãŸããããã
ãã® JSON ã¯æ©å¯æ å ±ãšããŠæ±ãå¿ èŠããããæäœæ¥ã§ç®¡çç»é¢ããèšå®ããéçšã¯
åçŸæ§ãç¡ããç°å¢å·®ç°ã®æž©åºã«ãªãã
Azureã«ããåºç€éçºæ³ã®
ãèšå€§ãªãã©ã¡ã¿ã»ã·ãŒããäœæããªãããšããæéãšåããã
å®çŸ©ãã¡ã€ã«ãã®ãã®ãæ§æã®æ£ãšããã®ãæãŸããã
åè¿°ã®ç®¡çããŒã«ã䜿çšããŠèšå®ãè¡ãã
ããŒãã£ã«ãã¹ãããã¥ãŒããšã¯ã¹ãã§ã³ãžãªã©ã®ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãæ¿èªãã
- ããã©ã«ãã»ãŠãŒã¶ãŒ
- ãŠãŒã¶ãŒåãguestããã¹ã¯ãŒããguestãã
- ããŒãã£ã«ãã¹ãã/ããžã®ãã«ã¢ã¯ã»ã¹ãèš±å¯ãããã
- èŠå®ã§ã¯ãã¹ãã»ããŒã«ã«æ¥ç¶ã«ãã䜿çšã§ããªãã
loopback_users ã®èšå®ã none ã«ããããšã§ã
ãªã¢ãŒããã¹ãããã®æ¥ç¶ãèš±å¯ããããšãå¯èœã
- ãŠãŒã¶ã®ç®¡ç
-
CLI
-
远å
rabbitmqctl add_user 'username' 'password' -
æŽæ°
rabbitmqctl change_password -
åé€
rabbitmqctl delete_user 'username' -
äžèЧ
rabbitmqctl list_users -
ã¢ã¯ã»ã¹èš±å¯èšå®
Exchange以äžïŒQueueãªã©ïŒã®ã¢ã¯ã»ã¹èš±å¯ãèšå®ã§ããã
ïŒTopic ã®èªå¯ãšããã®ããããããïŒæ¢å®ã§ã¯ç¡å¹ã«ãªã£ãŠããïŒïŒ
ã»è¿œå# First ".*" for configure permission on every entity # Second ".*" for write permission on every entity # Third ".*" for read permission on every entity rabbitmqctl set_permissions -p "custom-vhost" "username" ".*" ".*" ".*"ã»åé€
rabbitmqctl clear_permissions -p "custom-vhost" "username"ã»äžæ¬
for v in $(rabbitmqctl list_vhosts --silent); do rabbitmqctl set_permissions -p $v "a-user" ".*" ".*" ".*"; done
-
-
ãã®ä»
- ããŒãããŒãæã®å®çŸ©ã®ã€ã³ããŒã
- å¥ã®èªèšŒããã¯ãšã³ãïŒLDAPãHTTPãAMQP ãªã©ïŒ
-
- åè
- RabbitMQ
- Authentication, Authorisation, Access Control
https://www.rabbitmq.com/access-control.html - Credentials and Passwords
https://www.rabbitmq.com/passwords.html
- Authentication, Authorisation, Access Control
- RabbitMQ
è£è¶³ïŒ
loopback_usersã®èšå®ã¯æ éã«ïŒ: æ¬æãè§ŠããŠãã
**ãloopback_users ã®èšå®ã none ã«ããã**ã¯ã
guest ãŠãŒã¶ããªã¢ãŒããã䜿ããããã«ãããšããæå³ã§ããããæ¢å®ã guest/guest ã¯ããŒã«ã«ãã¹ãããã®ã¿ â å®å šåŽã®èšèš ãloopback_users = noneã guest/guest ã§ã©ãããã§ãæ¥ç¶ã§ãã â ã誰ã§ãç¥ã£ãŠããè³æ Œæ å ±ããå€éšãã䜿ããæ€èšŒç°å¢ã§äžæçã«ç·©ããããšã¯ãã£ãŠãã
æ¬çªã§ãã®èšå®ã䜿ã£ãŠã¯ãªããªãã
æ£ããæé ã¯ã
- å°çšã®ãŠãŒã¶ãäœæããŠæš©éãä»äžããã
- guest ãŠãŒã¶ãåé€ããïŒ
rabbitmqctl delete_user guestïŒã§ããã
ãªãã3 ã€ã®
".*"ã¯
configure / write / read ã®æš©éãããããæ£èŠè¡šçŸã§æå®ãããã®ã§ã
".*"ã¯ãã¹ãŠã®ãªãœãŒã¹ã«å¯ŸããŠèš±å¯ãæå³ããã
æš©é 察象ãšãªãæäœ configure Queue / Exchange ã®äœæã»åé€ write ã¡ãã»ãŒãžã®çºè¡ïŒpublishïŒãBinding read ã¡ãã»ãŒãžã®ååŸïŒconsumeïŒ å®åã§ã¯ãçºè¡ããã ãã®ã¢ããªãæ¶è²»ããã ãã®ã¢ããªã®ããã«
æå°æš©éã§çµãã®ãæãŸããã
".*" ".*" ".*"ã¯ãå šæš©ãã§ããã
Azureã®ã¢ã¯ã»ã¹å¶åŸ¡ãšæš©éã§èšãã°
ãææè ããé ã£ãŠããã®ãšåãã§ããã
- ãµãŒããŒèªèšŒãšã¯ã©ã€ã¢ã³ãèªèšŒã®äž¡æ¹ãå¯èœã
- ãµãŒããŒèªèšŒ
rabbitmq-auth-mechanism-ssl ãæå¹ã«ããŠã
ã¯ã©ã€ã¢ã³ãã EXTERNAL ã¡ã«ããºã ã䜿ãããã«èšå® - ã¯ã©ã€ã¢ã³ãèªèšŒ
- ãŠãŒã¶ãŒå㯠CN ãšäžèŽããã
- ã¯ã©ã€ã¢ã³ããæäŸãããã¹ã¯ãŒãã¯ãã¹ãŠç¡èŠãããã
- åè
- RabbitMQ
- TLS Support
https://www.rabbitmq.com/ssl.html - Troubleshooting TLS-enabled Connections
https://www.rabbitmq.com/troubleshooting-ssl.html
- TLS Support
- RabbitMQ ã§ TLS éä¿¡ãæå¹ã«ãã - OutSystems
https://success.outsystems.com/ja-jp/Support/Enterprise_Customers/ - Jeffrey A Becker's Blog - Using SSL client certificates for authentication with RabbitMQ
https://weblogs.asp.net/jeffreyabecker/Using-SSL-client-certificates-for-authentication-with-RabbitMQ - RabbitMQ ã SSL 察å¿ãããŠã¿ã (with Graylog ã§ãã°ãåãåãããŠã¿ã) | 俺çåå¿é²
https://orebibou.com/ja/home/201702/20170212_001/
- RabbitMQ
è£è¶³ïŒã¯ã©ã€ã¢ã³ãèšŒææžèªèšŒã®èŠç¹ïŒ: ããŠãŒã¶ãŒå㯠CN ãšäžèŽããã
ããã¹ã¯ãŒãã¯ãã¹ãŠç¡èŠãããããšãã 2 è¡ãã
ãã®æ¹åŒã®æ¬è³ªã衚ããŠãããããã¹ã¯ãŒãèªèšŒïŒPLAINïŒã æ¥ç¶æã« ãŠãŒã¶ãŒå + ãã¹ã¯ãŒã ãéã â ãã¹ã¯ãŒããæŒãããšæãããŸããã ãã¯ã©ã€ã¢ã³ãèšŒææžèªèšŒïŒEXTERNALïŒã TLS ãã³ãã·ã§ã€ã¯ã§ã¯ã©ã€ã¢ã³ãèšŒææžãæç€º â ãã®èšŒææžã® CN ãããŠãŒã¶ãŒåããšããŠæ±ããã â ãã¹ã¯ãŒããšããæŠå¿µãç¡ãã€ãŸããRabbitMQ åŽã«ãCN ãšåãååã®ãŠãŒã¶ãã
äœã£ãŠããå¿ èŠãããïŒåŸæ²ã®ãã¥ãŒããªã¢ã«ã§
ãCN ãšäžèŽãããŠãŒã¶ãŒãäœæããããšããã®ã¯ãã®ããïŒã
å©ç¹ 泚æ ãã¹ã¯ãŒããé åžã»ç®¡çããªããŠãã èšŒææžã®é åžãšå€±å¹ç®¡çãå¿ èŠã«ãªã ç§å¯éµã¯ç«¯æ«ããåºãªã æå¹æéåãã§äžæã«æ¥ç¶äžèœã«ãªã çµè·¯ãæå·åããã èšŒææžã¹ãã¢ã®ç®¡çïŒèšŒææžïŒ IoT ããã€ã¹ã®ããã«å°æ°ãå€ãããã¹ã¯ãŒãéçšãçŸå®çã§ãªã
å Žåã«æå¹ãªæ¹åŒã§ãã
ïŒIoTé¢é£ã®éä¿¡ãããã³ã«ïŒã
AMQP 1.0 ã§åé€ãããã®ã§ãã³ã¬ã¯ãçŽç²ã«ãRabbitMQ ã®è©±ã
éä¿¡ãã人
åä¿¡ãã人
éå信察象ã®ã¡ãã»ãŒãž
ãã¥ãŒ
Queue ãžã®é éã«ãŒã«
- direct
routing key ãš binding key ãå®å šäžèŽãã Message ã ã Queue ã«é éã - fanout
binding key ãç¡èŠããŠå šãŠã® Queue ã« Message ãé éïŒãããŒããã£ã¹ãïŒ - topic
routing key ãš binding key ã§ãéšåäžèŽãã Message ã Queue ã«é éã
ç§»è¡ã¡ã¢ïŒäœè£ïŒ: åå žã®ãå®å šããMessageãã¯
ãå®å šäžèŽãã Messageãã®è±åã§ããããè£ã£ãã
è£è¶³ïŒExchange ã RabbitMQ ã®äžæ žïŒ: ãProducer ã Queue ã«çŽæ¥å ¥ããã
ã®ã§ã¯ãªããå¿ ã Exchange ãçµç±ãããšããæ§é ã
RabbitMQ ã®ç¹åŸŽã§ãããProducer â ãExchangeã --binding--> Queue1 â Consumer A â --binding--> Queue2 â Consumer B â ããã§ãã©ã® Queue ã«å ¥ãããããæ±ºãããã®éæ¥åã«ãããProducer ã¯å®å ãç¥ããªããŠããã
Queue ã Consumer ãåŸããå¢ãããŠãã
Binding ãè¶³ãã ãã§ Producer ã¯å€æŽäžèŠã«ãªãïŒççµåïŒã3 çš®é¡ïŒïŒ headersïŒã®äœ¿ãåãã¯æ¬¡ã®ãšããã
çš®é¡ å€å® çšé direct å®å šäžèŽ ãã¥ãŒãžã®æ¯ãåã fanout å€å®ããªãïŒå šéšã«é ãïŒ åå ±ïŒAzure Event Gridã®ãã¡ã³ã¢ãŠãã«çžåœïŒ topic ã¯ã€ã«ãã«ãŒãäžèŽïŒ *ïŒ1 èªã#ïŒè€æ°èªïŒéå±€çãªæ¯ãåã headers ããããŒã®å€ ç¹æ® topic ãæãæè»ã§ãäŸãã° routing key ã
log.error.dbã®ãšãã
binding ãlog.#ãlog.error.*ãªãäžèŽãã
log.info.*ãªãäžèŽããªãã
1 ã€ã®ã¡ãã»ãŒãžãè€æ°ã®èгç¹ã§æ¯ãåããããããªããAzure Service Busã«ã¯ Exchange ã«çžåœãã
æŠå¿µãç¡ãããããã¯ã®ãµãã¹ã¯ãªãã·ã§ã³ã«ãã£ã«ã¿ãæžã圢ã«ãªãã
ç§»è¡ã®éã¯ãã®æ§é ã®éããèšèšå€æŽã䌎ãã
- åºæã®ååãæã€åã ã®ã³ã³ããïŒè«ççã°ã«ãŒãïŒ
- ã³ã³ããäžã«ã¯ã以äžãªãœãŒã¹ãããã
è£è¶³: vhost ã¯
1 å°ã® RabbitMQ ãè«ççã«åå²ããä»çµã¿ã§ãããã1 ã€ã® RabbitMQ ãµãŒãã ââ vhost "/prod" ⊠æ¬çªçšã® Exchange / Queue / æš©é ââ vhost "/stg" ⊠æ€èšŒçšïŒååãåã Queue ãäœããïŒ ââ vhost "/team-a" ⊠éšéçš
广 å 容 åå空éã®åé¢ ååã® Queue ãå¥ vhost ã«äœãã æš©éã®åé¢ ãŠãŒã¶ã« vhost åäœã§æš©éãäžãã èšå®ã®åé¢ ããªã·ãŒã vhost åäœ ãã ãããªãœãŒã¹ïŒã¡ã¢ãªã»CPUã»ãã£ã¹ã¯ïŒã¯å ±æã§ããç¹ã«æ³šæããã
1 ã€ã® vhost ã§å€§éã«ã¡ãã»ãŒãžãæ»çãããšãå šäœãæ¢ãŸã
ïŒã¡ã¢ãª ã¢ã©ãŒã ã§å šæ¥ç¶ããããã¯ãããïŒã
æ¬çªãšæ€èšŒãåããµãŒãã®å¥ vhost ã«çœ®ãã®ã¯
ãã®çç±ã§æšå¥šãããªãã
æ§ã ãªèšèªåãã«ãªãªãŒã¹ãããŠããã
- 以äžã®ã³ãŒãã¯.NET Coreã§ã倧æ¹åãã
- äžç®æã倿Žããã
-
ea.Bodyâ â â
-
ea.Body.ToArray()
-
- Qiita ã®ãµã³ãã«ãããŒã¹ã«åŒã£ãã
- äžç®æã倿Žããã
using Newtonsoft.Json;
using RabbitMQ;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
// ãã¹ãå
var hostname = "localhost";
// Taskãã£ã³ã»ã«ããŒã¯ã³
var tokenSource = new CancellationTokenSource();
Console.WriteLine($"start .Net RabbitMQ Example. Ctl+C to exit");
X509Certificate2 cli = new X509Certificate2(@"C:\certs\client.pfx", "xxxxx");
// ãã¡ã¯ããªçæ
var factory = new ConnectionFactory()
{
HostName = hostname,
//UserName = "hogecli",
//Password = "hogecli",
AuthMechanisms = new IAuthMechanismFactory[] { new ExternalMechanismFactory() },
Ssl = new SslOption
{
Enabled = true,
ServerName = hostname,
AcceptablePolicyErrors = SslPolicyErrors.RemoteCertificateNameMismatch
| SslPolicyErrors.RemoteCertificateChainErrors,
Certs = new X509CertificateCollection(new X509Certificate[] { cli })
}
};
// ãããªãã·ã£ãŒã¿ã¹ã¯
var pTask = Task.Run(() => new Action<ConnectionFactory, CancellationToken>(async (f, cancel) => {
// ã³ãã¯ã·ã§ã³ïŒãã£ã³ãã«çæ
using (var conn = f.CreateConnection())
using (var channel = conn.CreateModel())
{
// Exchangeçæ
channel.ExchangeDeclare("test", "fanout", false, true);
while (true)
{
// ãã£ã³ã»ã«åŸ
ã¡
if (cancel.IsCancellationRequested)
{
break;
}
var msg = new SendMessage()
{
Message = "Hello",
Timestamp = DateTime.UtcNow.ToBinary()
};
var body = JsonConvert.SerializeObject(msg);
// Publish!!
try
{
channel.BasicPublish("test", "", null, Encoding.UTF8.GetBytes(body));
Console.WriteLine($"success send. message: {msg.Message}, timestamp: {msg.Timestamp}");
}
catch (Exception ex)
{
Console.WriteLine($"failer send. reason: {ex.Message}");
}
await Task.Delay(10000);
}
}
})(factory, tokenSource.Token), tokenSource.Token);
// ã³ã³ã·ã¥ãŒããŒã¿ã¹ã¯
var cTask = Task.Run(() => new Action<ConnectionFactory, CancellationToken>((f, cancel) => {
// ã³ãã¯ã·ã§ã³ïŒãã£ã³ãã«çæ
using (var conn = f.CreateConnection())
using (var channel = conn.CreateModel())
{
// Exchangeçæ
channel.ExchangeDeclare("test", "fanout", false, true);
// Queueçæ
var queueName = channel.QueueDeclare().QueueName;
// Bind Queue
channel.QueueBind(queueName, "test", "");
// ã³ã³ã·ã¥ãŒããŒçæ
var consumer = new EventingBasicConsumer(channel);
// åä¿¡ã€ãã³ãå®çŸ©
consumer.Received += (_, ea) =>
{
var msg = JsonConvert.DeserializeObject<ConsumedMessage>(Encoding.UTF8.GetString(ea.Body.ToArray()));
Console.WriteLine($"success consumed. message: {msg.Message}, timestamp: {msg.Timestamp}");
};
// ã³ã³ã·ã¥ãŒããŒç»é²
channel.BasicConsume(queueName, true, consumer);
while (true)
{
// ãã£ã³ã»ã«åŸ
ã¡
if (cancel.IsCancellationRequested)
{
break;
}
}
}
})(factory, tokenSource.Token), tokenSource.Token);
// Ctl+CåŸ
æ©
Console.CancelKeyPress += (_, e) =>
{
e.Cancel = true;
tokenSource.Cancel(); // Taskãã£ã³ã»ã«
};
Task.WaitAll(pTask, cTask);
Console.WriteLine("stop .Net RabbitMQ Example. press any key to close.");
Console.ReadKey();
}
}
public class SendMessage
{
public string Message { get; set; }
public long Timestamp { get; set; }
}
public class ConsumedMessage
{
public string Message { get; set; }
public long Timestamp { get; set; }
}
}- åè
- RabbitMQ ã§ Publisher ãš ConsumerïŒC# ç·šïŒ
https://qiita.com/lightstaff/items/1a8a1e602d486571cb3a - RabbitMQ tutorial - "Hello World!" â RabbitMQ
https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html - ããæŽç·Žãããå®è£
https://github.com/OpenTouryoProject/DxCommon/tree/develop/Edge/RabbitMQ/Client/CS
- RabbitMQ ã§ Publisher ãš ConsumerïŒC# ç·šïŒ
è£è¶³ïŒ
ea.Bodyâea.Body.ToArray()ã®å€æŽãæå³ãããã®ïŒ: æ¬æã
ãäžç®æã倿Žããããšè¿°ã¹ãŠãããã®å·®åã¯ã
.NET ã®æ§èœæ¹åã®æµããåæ ããéèŠãªå€æŽã§ããããæ§ã ea.Body ⊠byte[]ïŒé åãã³ããŒãçºçããïŒ â RabbitMQ.Client 6.0 ã§å€æŽ ãæ°ã ea.Body ⊠ReadOnlyMemory<byte>ïŒã³ããŒããªãïŒ ea.Body.ToArray() ⊠byte[] ãèŠãå Žåã¯æç€ºçã«å€æ**
ReadOnlyMemory<byte>ã¯ããããã¡ãžã®åç §ã**ã§ããã
é åãæ°ãã«ç¢ºä¿ããªãã
ãã㯠JSONã®parseãè²ã 詊ããŠã¿ããã§è¿°ã¹ã
System.Text.JsonãSpan<T>ã䜿ãã®ãšåãåæ©ã§ããããã ããéå€§ãªæ³šæç¹ãããã
ãã³ãã©ã®å€ã«ea.Bodyãæã¡åºããšãå 容ãå£ãã
ïŒå¥ã®ã¡ãã»ãŒãžã§äžæžããããïŒã
éåæåŠçã«æž¡ãå Žåã¯å¿ ãToArray()ã§ã³ããŒããããªããRabbitMQ.Client 7.0 以éã§ã¯ API ã倧ããå€ããã
å®å šã«éåæïŒIChannelãCreateChannelAsyncã
AsyncEventingBasicConsumerïŒã«ãªã£ãŠããã
äžã®ã³ãŒã㯠6.x ç³»ãŸã§ã®ãã®ã§ããã
è£è¶³ïŒãã®ãµã³ãã«ã®æ³šæç¹ïŒ: åäœç¢ºèªçšã®ã³ãŒããšããŠã¯æå¿«ã ãã
æ¬çªã§ãã®ãŸãŸäœ¿ã£ãŠã¯ãããªãç¹ãããã€ãããã
ç®æ åé¡ å¯ŸåŠ BasicConsume(queueName, true, ...)第 2 åŒæ°ã autoAck: trueãåä¿¡ããç¬éã« ACK ããããããåŠçäžã«èœã¡ããšã¡ãã»ãŒãžã倱ãããfalseã«ããŠãåŠçå®äºåŸã«BasicAckwhile(true)ã®ããžãŒ ã«ãŒãã³ã³ã·ã¥ãŒãåŽã®åŸ æ©ãCPU ãé£ã朰ã ManualResetEventSlimçã§åŸ ã€æ¥ç¶ã®çæ 忥ç¶åŠçãç¡ã AutomaticRecoveryEnabledïŒæ¢å®ã§æå¹ïŒAcceptablePolicyErrorsèšŒææžåã®äžäžèŽãšãã§ãŒã³ã®ãšã©ãŒã蚱容ããŠãã æ¬çªã§ã¯èš±å®¹ããªãïŒæ€èšŒçšã®èšå®ïŒ äŸå€åŠç Publish ã®ã¿ try-catch Consumer åŽã«ãå¿ èŠ ç¹ã« 1 ã€ç®ã®
autoAck: trueã¯ã
Azure Service Busã®è£è¶³ã§è¿°ã¹ã
ããŒã¯ ããã¯ã®éã§ã**ãåãåã£ããæ¶ããã**æ¹åŒã§ããã
ã¡ãã»ãŒãžã®æ¶å€±ãèš±ãããªãçšéã§ã¯å¿ ãfalseã«ãããchannel.BasicConsume(queueName, autoAck: false, consumer); consumer.Received += (_, ea) => { try { // æ¥ååŠç channel.BasicAck(ea.DeliveryTag, multiple: false); // æåããã ACK } catch { channel.BasicNack(ea.DeliveryTag, false, requeue: true); // 倱æãããæ»ã } };ãŸãã
AcceptablePolicyErrorsã§èšŒææžãšã©ãŒãæ¡ã朰ããšã
TLS ã䜿ã£ãŠããæå³ãåæžããïŒäžéè æ»æãæ€ç¥ã§ããªãïŒã
æ€èšŒçšã®èšå®ã§ããããšãæèšããŠããããã
- RabbitMQ ã®ããã®åªãã .NET API
- åæã®éçºã¯ã15below ãã¹ãã³ãµãŒãšãªã£ãŠè¡ãããã
è£è¶³: EasyNetQ ã¯
RabbitMQ.Client ãå ã髿°Žæºã©ã€ãã©ãªã§ããã
äžã®ãµã³ãã« ã³ãŒãã§ææžãããŠãã
Exchange 宣èšã»Queue 宣èšã»Bindingã»ã·ãªã¢ã©ã€ãºã
åããèªåçã«æ±ºããŠãããïŒèŠçŽã«ããæ§æïŒã
RabbitMQ.Client EasyNetQ æœè±¡åºŠ äœãïŒAMQP ããã®ãŸãŸïŒ é«ãïŒåã§ããåãïŒ å¶åŸ¡ 现ããå¹ã èŠçŽã«åŸã åŠç¿ AMQP ã®çè§£ãèŠã ããæžãã åãå Žé¢ çŽ°ããå¶åŸ¡ãèŠããæ¢åã® Exchange æ§æã«åããã .NET å士ã®é£æºãææ©ã ãã ããExchange åã routing key ã®ä»ãæ¹ã
EasyNetQ ã®èŠçŽã«åŸãããã
- ä»èšèªã®ã¢ããªãšé£æºããã
- æ¢åã® Exchange æ§æã«èŒãã
ãšãã£ãå Žåã¯çŽ ã® RabbitMQ.Client ã®æ¹ãæ±ããããã
RabbitMQ ã¯ãµããŒãããªãïŒ
- AMQPNetLite
- Microsoft.Azure.Amqp
- ...
è£è¶³ïŒããµããŒãããªãïŒããžã®åçïŒ: çå圢ã§çµãã£ãŠããã®ã§è£è¶³ããã
çµè«ãšããŠã¯ãããã㯠AMQP 1.0 ã®ã¯ã©ã€ã¢ã³ãã§ããã
RabbitMQ ã¯æ¢å®ã§ã¯ AMQP 1.0 ã話ããªãããã
ãã®ãŸãŸã§ã¯æ¥ç¶ã§ããªããRabbitMQïŒæ¢å®ïŒ : AMQP 0-9-1ïŒ5672 çªïŒ AMQPNetLite : AMQP 1.0 â äºææ§ãç¡ãïŒååã¯åãã§ãå¥ã®ãããã³ã«ïŒ æ¥ç¶ã§ããªããã ãããã©ã°ã€ã³ã§ AMQP 1.0 ã«å¯Ÿå¿ãããããšã¯å¯èœã§ããã
rabbitmq-plugins enable rabbitmq_amqp1_0ãªããRabbitMQ 4.0ïŒ2024 幎ïŒã§ãã€ãã£ãã« AMQP 1.0 ããµããŒããã
ããã«ãªããç¶æ³ã¯æ¹åããŠãããå®åäžã®æéãšããŠã¯ã
æ¥ç¶å 䜿ãã©ã€ãã©ãª RabbitMQ RabbitMQ.ClientïŒAMQP 0-9-1ïŒ Azure Service Bus Azure.Messaging.ServiceBusïŒAMQP 1.0ïŒ æ±çšã® AMQP 1.0 ãããŒã«ãŒ AMQPNetLite ãšãªãããAMQP ã ããçžäºã«ç¹ããããšèããªãããšãéèŠã§ããã
Azure Service Busãžã®ç§»è¡ãæ€èšããéãã
ãããã³ã«ãéãããã¯ã©ã€ã¢ã³ã ã³ãŒãã®æžãæããå¿ èŠã«ãªãã
Mosquitto ã®ãã¥ãŒããªã¢ã«ãšåãã
-
ãµãŒããŒèšŒææžãå©çš
-
advanced.config
[ {rabbit, [ {ssl_listeners, [5671]}, {ssl_options, [{cacertfile,"c:/certs/ca.crt"}, {certfile,"c:/certs/server.crt"}, {keyfile,"c:/certs/server.key"}, {verify,verify_none}, {fail_if_no_peer_cert,false}]} ]} ]. -
ãµãŒãã¹ã®åèµ·å
管çç»é¢ã§ SSL ããŒãã確èªãããListening ports amqp/ssl 0.0.0.0 5671 amqp/ssl :: 5671
-
-
ãã¹ã¯ãŒãèªèšŒ
管çç»é¢ã§ãŠãŒã¶ãŒãäœæããã -
ã¯ã©ã€ã¢ã³ãèšŒææžãå©çš
-
ãã©ã°ã€ã³ãæå¹å
rabbitmq-plugins enable rabbitmq_auth_mechanism_ssl -
CN ãšäžèŽãããŠãŒã¶ãŒãäœæããã
-
advanced.config
[ {rabbit, [ {ssl_listeners, [5671]}, {auth_mechanisms, ['EXTERNAL', 'PLAIN']}, {ssl_cert_login_from, common_name}, {ssl_options, [{cacertfile,"c:/certs/ca.crt"}, {certfile,"c:/certs/server.crt"}, {keyfile,"c:/certs/server.key"}, {verify,verify_peer}, {fail_if_no_peer_cert,true}]} ]} ]. -
ãµãŒãã¹ã®åèµ·å
管çç»é¢ã§ SSL ããŒãã確èªãããListening ports amqp/ssl 0.0.0.0 5671 amqp/ssl :: 5671
-
è£è¶³ïŒ2 ã€ã®èšå®ã®å·®åããã¯ã©ã€ã¢ã³ãèªèšŒã®æç¡ãïŒ: 2 ã€ã®
advanced.configãèŠæ¯ã¹ããšãéã㯠4 ç®æã§ããã
é ç® ãµãŒããŒèšŒææžã®ã¿ ã¯ã©ã€ã¢ã³ãèšŒææžã auth_mechanismsïŒèšèŒãªãïŒPLAIN çïŒ ['EXTERNAL', 'PLAIN']ssl_cert_login_fromïŒ common_nameïŒCN ããŠãŒã¶åãšããïŒverifyverify_noneverify_peerïŒã¯ã©ã€ã¢ã³ãèšŒææžãæ€èšŒããïŒfail_if_no_peer_certfalsetrueïŒèšŒææžãç¡ããã°æåŠïŒã€ãŸãã
verify_peerïŒfail_if_no_peer_cert = trueã®çµã
ãã¯ã©ã€ã¢ã³ãèšŒææžãå¿ é ã«ããããšããæå®ã§ãããverify_none ⊠ã¯ã©ã€ã¢ã³ãèšŒææžãèŠãªã verify_peer + fail_if_...=false ⊠ããã°æ€èšŒãç¡ããŠãéãïŒäžéåç«¯ïŒ verify_peer + fail_if_...=true ⊠ãå¿ é ããç¡ããã°æ¥ç¶ãæåŠ â ããã䜿ãäžéã®èšå®ïŒ
falseïŒã¯é¿ããã¹ãã§ããã
ãèšŒææžãåºããªãã¯ã©ã€ã¢ã³ããçŽ éããããããã
å¶åŸ¡ãšããŠæå³ããªããªãããªããSSL ãæå¹ã«ããŠã
å¹³æããŒãïŒ5672ïŒã¯éãããŸãŸã§ããç¹ã«æ³šæããã
éåã§ãªãç°å¢ã§ã¯ãlisteners.tcpãç¡å¹åããŠ
TLS ã®ã¿åãä»ããæ§æã«ããã
- èªèšŒå±ã®èšŒææžïŒca.crtïŒã¯ãèšŒææžã¹ãã¢ã®
ä¿¡é Œãããã«ãŒãèšŒææ©é¢ã«å ¥ããŠããå¿ èŠãããã - ãµãŒããŒèšŒææžãå©çš
-
以äžãæžãæããã
using System.Net.Security; // 远å ... // ãã¡ã¯ããªçæ var factory = new ConnectionFactory() { HostName = hostname, Ssl = new SslOption // 远å { Enabled = true, ServerName = hostname, AcceptablePolicyErrors = SslPolicyErrors.RemoteCertificateNameMismatch | SslPolicyErrors.RemoteCertificateChainErrors, } };
-
ãããã°å®è¡ã§åäœç¢ºèª
åäœããã
-
- ãã¹ã¯ãŒãèªèšŒãå©çš
-
以äžãæžãæããã
var factory = new ConnectionFactory() { HostName = hostname, UserName = "xxxxx", // 远å Password = "xxxxx", // 远å
-
ãããã°å®è¡ã§åäœç¢ºèª
åäœããã
-
- ã¯ã©ã€ã¢ã³ãèšŒææžãå©çš
-
以äžãæžãæããã
using System.Security.Cryptography.X509Certificates; // 远å ... X509Certificate2 cli = new X509Certificate2(@"C:\certs\client.pfx", "xxxxx"); // 远å // ãã¡ã¯ããªçæ var factory = new ConnectionFactory() { HostName = hostname, //UserName = "xxxxx", // åé€ //Password = "xxxxx", // åé€ AuthMechanisms = new IAuthMechanismFactory[]{ new ExternalMechanismFactory()}, // 远å Ssl = new SslOption { Enabled = true, ServerName = hostname, AcceptablePolicyErrors = SslPolicyErrors.RemoteCertificateNameMismatch | SslPolicyErrors.RemoteCertificateChainErrors, Certs = new X509CertificateCollection(new X509Certificate[] { cli }) // 远å } };
-
ãããã°å®è¡ã§åäœç¢ºèª
åäœããïŒssl_cert_login_fromãæžãäœçœ®ã«æ³šæïŒïŒã
-
è£è¶³ïŒæ«å°Ÿã®æ³šææžãã«ã€ããŠïŒ: ã
ssl_cert_login_fromãæžãäœçœ®ã«
泚æïŒããšããææã¯ãErlang ã®èšå®ãã¡ã€ã«ã®æ§é ã«èµ·å ããã[ {rabbit, [ {ssl_listeners, [5671]}, {auth_mechanisms, ['EXTERNAL', 'PLAIN']}, {ssl_cert_login_from, common_name}, â ãrabbit çŽäžãã«æžã {ssl_options, [ ... â ssl_options ã®ãäžã§ã¯ãªãã ]} ]} ].ååã«
ssl_ãä»ãããssl_optionsã®äžã«æžããããªããã
rabbitã®çŽäžãæ£ããã
誀ã£ãäœçœ®ã«æžããŠããšã©ãŒã«ãªãããåã«ç¡èŠãããããã
ãèšå®ããã®ã« CN ã§ãã°ã€ã³ã§ããªãããšããç¶æ ã«ãªãã
æ°ä»ãã«ããçš®é¡ã®èª€ãã§ãããæ³šææžãã®äŸ¡å€ãé«ãããªããã¯ã©ã€ã¢ã³ãåŽã®
AuthMechanisms = ... ExternalMechanismFactory()ã¯
**ããã¹ã¯ãŒãã§ã¯ãªãèšŒææžã§èªèšŒããã**ãšãã宣èšã§ã
ãµãŒãåŽã®auth_mechanismsã«'EXTERNAL'ãå«ãŸããŠããå¿ èŠãããã
äž¡åŽã®èšå®ã察ã«ãªã£ãŠããç¹ãæŒãããŠããããã
ç§»è¡ã¡ã¢: åå žã§ãèŠåºãã®ã¿ã§ãæ¬æãååšããªãã
- RabbitMQ ã«å
¥éããŠãã§ã³ãã§ã³ããŠã¿ã - kakakakakku blog
https://kakakakakku.hatenablog.com/entry/2015/08/26/000853
- RabbitMQ ã«ããéåæåŠç
https://tech-lab.sios.jp/archives/7902 - Windows ã§ RabbitMQ
https://tech-lab.sios.jp/archives/7920 - Rest API ã§ RabbitMQ
https://tech-lab.sios.jp/archives/7941 - .NET ã§ RabbitMQ
https://tech-lab.sios.jp/archives/8018
- éçºç°å¢ãŸãã¯ãã¹ãç°å¢ã® RabbitMQ ã§ã€ãã³ã ãã¹ãå®è£
ãã
https://docs.microsoft.com/ja-jp/dotnet/architecture/microservices/multi-container-microservice-net-applications/rabbitmq-event-bus-development-test-environment - Azure Functions ã«ããã Azure RabbitMQ ãã€ã³ã
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-bindings-rabbitmq - Azure Functions ã«ããã RabbitMQ ã®åºåãã€ã³ã
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-bindings-rabbitmq-output
- RabbitMQ ãã€ã³ã¹ããŒã«ããïŒWindows/Mac/DockerïŒ
https://qiita.com/suke_masa/items/5d583462727660663fde - RabbitMQ ã§ã¡ãã»ãŒãžã®éåä¿¡ãè¡ããŸã§ã®ç°å¢èšå®ã«ã€ããŠã®ã¡ã¢
https://qiita.com/ptiringo/items/c554fa66f0d985394fed
è£è¶³ïŒMicrosoft Docs ã® 1 ä»¶ç®ã瀺ã䜿ãåãïŒ: åèã®
**ãéçºç°å¢ãŸãã¯ãã¹ãç°å¢ã® RabbitMQ ã§ã€ãã³ã ãã¹ãå®è£ ããã**ãšãã
衚é¡ã瀺åçã§ãããMicrosoft ã® eShopOnContainersïŒãã€ã¯ããµãŒãã¹ã®åç §å®è£ ïŒã§ã¯ã
ãéçºã»ãã¹ãã RabbitMQïŒã³ã³ããã§æè»œã«ç«ãŠãããïŒ â åãã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£ ãå·®ãæ¿ã ãæ¬çªã Azure Service BusïŒãããŒãžãïŒãšããæ§æãæ¡ã£ãŠããã
ç°å¢ éžæ çç± éçºã»ãã¹ã RabbitMQ docker runäžçºãè²»çšãŒãããªãã©ã€ã³ã§ãåãæ¬çª Azure Service Bus éçšäžèŠãSLAãäŒæ¥åãæ©èœ ãããæç«ãããã«ã¯ã
ã¢ããªåŽã§ã¡ãã»ãŒãžåºç€ãæœè±¡åããŠããå¿ èŠããã
ïŒIEventBusã€ã³ã¿ãŒãã§ã€ã¹ãå®çŸ©ããå®è£ ã 2 ã€çšæããïŒãã¯ã©ãŠã ã¢ããªã±ãŒã·ã§ã³ ã¢ãŒããã¯ã㣠ã¬ã€ãã®
ãæ¹è¯ãèŠèŸŒãã èšèšãïŒæœè±¡ã€ã³ãã©ã¹ãã©ã¯ãã£ããã¡ã€ã³ ããžãã¯ãšåé¢ïŒã
ãã®ãŸãŸåœãŠã¯ãŸãå®è·µäŸã§ããã
Tags: ç§»è¡, éä¿¡æè¡, .NETéçº, IoT