{"id":371,"date":"2015-10-28T04:18:39","date_gmt":"2015-10-28T04:18:39","guid":{"rendered":"http:\/\/onlinelab.info\/?p=371"},"modified":"2015-10-28T04:18:39","modified_gmt":"2015-10-28T04:18:39","slug":"tim-hieu-rabbitmq-phan-1","status":"publish","type":"post","link":"https:\/\/www.asianux.org.vn\/index.php\/2015\/10\/28\/tim-hieu-rabbitmq-phan-1\/","title":{"rendered":"T\u00ecm hi\u1ec3u RabbitMQ &#8211; Ph\u1ea7n 1"},"content":{"rendered":"<h1 class=\"ui dividing header\">Gi\u1edbi thi\u1ec7u<\/h1>\n<p>RabbitMQ l\u00e0 m\u1ed9t message broker ( message-oriented middleware) s\u1eed d\u1ee5ng giao th\u1ee9c AMQP &#8211; Advanced Message Queue Protocol (\u0110\u00e2y l\u00e0 giao th\u1ee9c ph\u1ed5 bi\u1ebfn, th\u1ef1c t\u1ebf rabbitmq h\u1ed7 tr\u1ee3 nhi\u1ec1u giao th\u1ee9c). RabbitMQ \u0111\u01b0\u1ee3c l\u1eadp tr\u00ecnh b\u1eb1ng ng\u00f4n ng\u1eef Erlang. RabbitMQ cung c\u1ea5p cho l\u1eadp tr\u00ecnh vi\u00ean m\u1ed9t ph\u01b0\u01a1ng ti\u1ec7n trung gian \u0111\u1ec3 giao ti\u1ebfp gi\u1eefa nhi\u1ec1u th\u00e0nh ph\u1ea7n trong m\u1ed9t h\u1ec7 th\u1ed1ng l\u1edbn ( V\u00ed d\u1ee5 openstack &#8211; M\u1ed9t c\u00f4ng ngh\u1ec7 r\u1ea5t th\u00fa v\u1ecb hi v\u1ecdng m\u1ed9t ng\u00e0y n\u00e0o \u0111\u00f3 t\u00f4i \u0111\u1ee7 s\u1ee9c \u0111\u1ec3 vi\u1ebft v\u00e0i b\u00e0i v\u1ec1 ch\u1ee7 \u0111\u1ec1 n\u00e0y ). RabbitMQ s\u1ebd nh\u1eadn message \u0111\u1ebfn t\u1eeb c\u00e1c th\u00e0nh ph\u1ea7n kh\u00e1c nhau trong h\u1ec7 th\u1ed1ng, l\u01b0u tr\u1eef ch\u00fang an to\u00e0n tr\u01b0\u1edbc khi \u0111\u1ea9y \u0111\u1ebfn \u0111\u00edch.<\/p>\n<p>Th\u1ef1c s\u1ef1, v\u1edbi l\u1eadp tr\u00ecnh vi\u00ean th\u00ec rabbitmq r\u1ea5t \u0111\u00e1ng gi\u00e1. N\u1ebfu kh\u00f4ng c\u00f3 c\u00e1c h\u1ec7 th\u1ed1ng message broker nh\u01b0 rabbitmq th\u00ec b\u1ea5t c\u1ee9 l\u00fac n\u00e0o c\u1ea7n \u0111\u1ea9y data gi\u1eefa c\u00e1c th\u00e0nh ph\u1ea7n trong h\u1ec7 th\u1ed1ng, l\u1eadp tr\u00ecnh vi\u00ean c\u1ea7n m\u1ed9t k\u1ebft n\u1ed1i tr\u1ef1c ti\u1ebfp. M\u1ed9t h\u1ec7 th\u1ed1ng c\u00e0ng l\u1edbn. S\u1ed1 th\u00e0nh ph\u1ea7n c\u00e0ng nhi\u1ec1u, m\u1ee9c \u0111\u1ed9 trao \u0111\u1ed5i message gi\u1eefa c\u00e0ng th\u00e0nh ph\u1ea7n c\u0169ng v\u00ec th\u1ebf t\u0103ng l\u00ean khi\u1ebfn vi\u1ec7c l\u1eadp tr\u00ecnh tr\u1edf n\u00ean ph\u1ee9c t\u1ea1p. T\u00f4i t\u1eebng \u0111\u1ecdc v\u00e0i b\u00e0i b\u00e1o v\u1ec1 l\u1eadp tr\u00ecnh th\u00ec th\u1ea5y h\u1ecd khuy\u1ebfn c\u00e1o c\u00e1c l\u1eadp tr\u00ecnh vi\u00ean ch\u1ec9 n\u00ean t\u1eadp trung v\u00e0o business logic c\u1ee7a \u1ee9ng d\u1ee5ng c\u00f2n c\u00e1c c\u00f4ng t\u00e1c h\u1eadu tr\u01b0\u1eddng th\u00ec n\u00ean \u0111\u01b0\u1ee3c t\u00e1i s\u1eed d\u1ee5ng c\u00e1c gi\u1ea3i ph\u00e1p \u0111\u00e3 c\u00f3. Rabbitmq c\u0169ng l\u00e0 m\u1ed9t gi\u1ea3i ph\u00e1p r\u1ea5t t\u1ed1t trong c\u00e1c ki\u1ebfn tr\u00fac h\u1ec7 th\u1ed1ng l\u1edbn.<\/p>\n<h1 class=\"ui dividing header\">T\u1ea1i sao l\u1ea1i s\u1eed d\u1ee5ng RabbitMQ<\/h1>\n<p>Ch\u00fang ta th\u1eed xem c\u00e1c message broker nh\u01b0 rabbitmq \u0111em l\u1ea1i l\u1ee3i \u00edch g\u00ec trong vi\u1ec7c thi\u1ebft k\u1ebf \u1ee9ng d\u1ee5ng. Trong m\u1ed9t h\u1ec7 th\u1ed1ng ph\u00e2n t\u00e1n (distributed system), c\u00f3 r\u1ea5t nhi\u1ec1u th\u00e0nh ph\u1ea7n. N\u1ebfu mu\u1ed1n c\u00e1c th\u00e0nh ph\u1ea7n n\u00e0y giao ti\u1ebfp \u0111\u01b0\u1ee3c v\u1edbi nhau th\u00ec ch\u00fang ph\u1ea3i bi\u1ebft nhau. Nh\u01b0ng \u0111i\u1ec1u n\u00e0y g\u00e2y r\u1eafc r\u1ed1i cho vi\u1ec7c vi\u1ebft code. M\u1ed9t th\u00e0nh ph\u1ea7n ph\u1ea3i bi\u1ebft qu\u00e1 nhi\u1ec1u \u0111\u00e2m ra r\u1ea5t kh\u00f3 maintain, debug. Gi\u1ea3i ph\u00e1p \u1edf \u0111\u00e2y l\u00e0 thay v\u00ec c\u00e1c li\u00ean k\u1ebft tr\u1ef1c ti\u1ebfp, khi\u1ebfn c\u00e1c th\u00e0nh ph\u1ea7n ph\u1ea3i bi\u1ebft nhau th\u00ec s\u1eed d\u1ee5ng m\u1ed9t li\u00ean k\u1ebft trung gian qua m\u1ed9t message broker. V\u1edbi s\u1ef1 tham gia c\u1ee7a message broker th\u00ec producer s\u1ebd kh\u00f4ng h\u1ec1 bi\u1ebft consumer. N\u00f3 ch\u1ec9 vi\u1ec7c g\u1eedi message \u0111\u1ebfn c\u00e1c queue trong message broker. Consumer ch\u1ec9 vi\u1ec7c \u0111\u0103ng k\u00fd nh\u1eadn message t\u1eeb c\u00e1c queue n\u00e0y.<\/p>\n<p>T\u1ea5t nhi\u00ean, c\u00f3 th\u1ec3 c\u00f3 m\u1ed9t gi\u1ea3i ph\u00e1p l\u00e0 s\u1eed d\u1ee5ng database \u0111\u1ec3 l\u01b0u c\u00e1c message trong c\u00e1c temporary table. Tuy nhi\u00ean x\u00e9t v\u1ec1 hi\u1ec7u n\u0103ng th\u00ec kh\u00f4ng th\u1ec3 b\u1eb1ng message broker v\u00ec m\u1ed9t s\u1ed1 l\u00fd do: T\u1ea7n xu\u1ea5t trao \u0111\u1ed5i message cao s\u1ebd l\u00e0m t\u0103ng load c\u1ee7a database, gi\u1ea3m performance \u0111\u00e1ng k\u1ec3. Trong m\u00f4i tr\u01b0\u1eddng multithread, database c\u1ea7n c\u00f3 c\u01a1 ch\u1ebf lock. Lock c\u0169ng l\u00e0m gi\u1ea3m performance. S\u1eed d\u1ee5ng message broker s\u1ebd kh\u00f4ng c\u00f3 v\u1ea5n \u0111\u1ec1 n\u00e0y.<\/p>\n<p>V\u00ec producer n\u00f3i chuy\u1ec7n v\u1edbi consumer trung gian qua message broker n\u00ean d\u00f9 producer v\u00e0 consumer c\u00f3 kh\u00e1c bi\u1ec7t nhau v\u1ec1 ng\u00f4n ng\u1eef th\u00ec giao ti\u1ebfp v\u1eabn th\u00e0nh c\u00f4ng. D\u00f9 vi\u1ebft b\u1eb1ng java, python, php hay ruby&#8230; th\u00ec ch\u1ec9 c\u1ea7n th\u1ecfa m\u00e3n giao th\u1ee9c v\u1edbi message broker th\u00ec th\u00f4ng su\u1ed1t h\u1ebft. HI\u1ec7n nay, rabbitmq c\u0169ng \u0111\u00e3 cung c\u1ea5p client library cho kh\u00e1 nhi\u1ec1u c\u00e1c ng\u00f4n ng\u1eef r\u1ed3i. T\u00ednh n\u0103ng n\u00e0y cho ph\u00e9p t\u00edch h\u1ee3p h\u1ec7 th\u1ed1ng linh ho\u1ea1t.<\/p>\n<p>M\u1ed9t \u0111\u1eb7c t\u00ednh c\u1ee7a rabbitmq l\u00e0 asynchronous. Producer kh\u00f4ng th\u1ec3 bi\u1ebft khi n\u00e0o message \u0111\u1ebfn \u0111\u01b0\u1ee3c consumer hay khi n\u00e0o message \u0111\u01b0\u1ee3c consumer x\u1eed l\u00fd xong. \u0110\u1ed1i v\u1edbi producer, \u0111\u1ea9y message \u0111\u1ebfn message broker l\u00e0 xong vi\u1ec7c. Consumer s\u1ebd l\u1ea5y message v\u1ec1 khi n\u00f3 mu\u1ed1n. \u0110\u1eb7c t\u00ednh n\u00e0y c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c t\u1eadn d\u1ee5ng \u0111\u1ec3 x\u00e2y d\u1ef1ng c\u00e1c h\u1ec7 th\u1ed1ng l\u01b0u tr\u1eef v\u00e0 x\u1eed l\u00fd log. ELK stack &#8211; Elasticsearch Logstash Kibana l\u00e0 m\u1ed9t v\u00ed d\u1ee5. \u0110\u00e2y l\u00e0 h\u1ec7 th\u1ed1ng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong m\u00f4i tr\u01b0\u1eddng DevOps kh\u00e1 hi\u1ec7u qu\u1ea3. Gi\u1ea3i quy\u1ebft b\u00e0i to\u00e1n chia s\u1ebb log c\u1ee7a \u1ee9ng d\u1ee5ng cho dev. Log \u0111\u01b0\u1ee3c \u0111\u1ea9y v\u00e0o message broker r\u1ed3i qua logstash l\u01b0u tr\u1eef v\u00e0o elastic \u0111\u1ec3 \u0111\u00e1nh index. Sau \u0111\u00f3 index \u0111\u01b0\u1ee3c kibana (m\u1ed9t web interface) s\u1eed d\u1ee5ng \u0111\u1ec3 th\u1ef1c hi\u1ec7n truy v\u1ea5n v\u00e0 hi\u1ec3n th\u1ecb k\u1ebft qu\u1ea3<\/p>\n<div class=\"fluidbox__wrap\"><a class=\"fluidbox fluidbox__instance-1 fluidbox--initialized fluidbox--closed fluidbox--ready\" href=\"https:\/\/s3-ap-southeast-1.amazonaws.com\/kipalog.com\/Screenshot%20from%202015-05-29%2000%3A23%3A51.png_j7u77yz8l5\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" class=\"fluidbox__thumb\" src=\"https:\/\/s3-ap-southeast-1.amazonaws.com\/kipalog.com\/Screenshot%20from%202015-05-29%2000%3A23%3A51.png_j7u77yz8l5\" alt=\"alt text\" title=\"\"><\/a><\/div>\n<p>B\u1ea3n th\u00e2n redis c\u0169ng c\u00f3 th\u1ec3 \u0111\u1ea3m nh\u1eadn vai tr\u00f2 c\u1ee7a message broker ( D\u00f9 cho m\u1ee5c \u0111\u00edch ban \u0111\u1ea7u c\u1ee7a n\u00f3 kh\u00f4ng ph\u1ea3i v\u1eady. \u0110\u00e2y l\u00e0 t\u00ednh n\u0103ng m\u1edf r\u1ed9ng sau n\u00e0y c\u1ee7a redis ) M\u00f4 h\u00ecnh tr\u00ean b\u1ea1n c\u00f3 th\u1ec3 ho\u00e0n to\u00e0n thay redis queue b\u1eb1ng rabbitmq.<\/p>\n<p>B\u00ean c\u1ea1nh c\u00e1c l\u1ee3i \u00edch k\u1ec3 tr\u00ean, rabbitmq c\u00f2n c\u00f3 nhi\u1ec1u t\u00ednh n\u0103ng th\u00fa v\u1ecb kh\u00e1c nh\u01b0:<\/p>\n<ul class=\"ui list\">\n<li>cluster: c\u00e1c b\u1ea1n c\u00f3 th\u1ec3 gom nhi\u1ec1u rabbitmq instance v\u00e0o m\u1ed9t cluster. M\u1ed9t queue \u0111\u01b0\u1ee3c \u0111inh ngh\u0129a tr\u00ean m\u1ed9t instance khi \u0111\u00f3 \u0111\u1ec1u c\u00f3 th\u1ec3 truy xu\u1ea5t t\u1eeb c\u00e1c instance c\u00f2n l\u1ea1i. C\u00f3 th\u1ec3 t\u1eadn d\u1ee5ng \u0111\u1ec3 l\u00e0m load balancing (tuy r\u1eb1ng c\u00f3 h\u1ea1n ch\u1ebf, t\u00f4i s\u1ebd n\u00f3i sau)<\/li>\n<li>high availibilty: cho ph\u00e9p failover khi s\u1eed d\u1ee5ng mirror queue.<\/li>\n<li>reliability: c\u00f3 c\u01a1 ch\u1ebf ack \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o message \u0111\u01b0\u1ee3c nh\u1eadn b\u1edfi consumer \u0111\u00e3 \u0111\u01b0\u1ee3c x\u1eed l\u00fd.<\/li>\n<\/ul>\n<h1 class=\"ui dividing header\">M\u00f4 h\u00ecnh<\/h1>\n<div class=\"fluidbox__wrap\"><a class=\"fluidbox fluidbox__instance-2 fluidbox--initialized fluidbox--closed fluidbox--ready\" href=\"https:\/\/s3-ap-southeast-1.amazonaws.com\/kipalog.com\/Screenshot%20from%202015-05-24%2022%3A07%3A35.png_syxcagcxq7\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" class=\"fluidbox__thumb\" src=\"https:\/\/s3-ap-southeast-1.amazonaws.com\/kipalog.com\/Screenshot%20from%202015-05-24%2022%3A07%3A35.png_syxcagcxq7\" alt=\"alt text\" title=\"\"><\/a><\/div>\n<p>C\u00f3 th\u1ec3 hi\u1ec3u message broker g\u1ea7n nh\u01b0 b\u01b0u \u0111i\u1ec7n. Site A theo c\u00e1ch g\u1ecdi c\u1ee7a rabbitmq l\u00e0 producer (ng\u01b0\u1eddi g\u1eedi th\u00f4ng \u0111i\u1ec7p). Site B v\u00e0 Site C theo c\u00e1ch g\u1ecdi c\u1ee7a rabbitmq l\u00e0 consumer (ng\u01b0\u1eddi nh\u1eadn th\u00f4ng \u0111i\u1ec7p). Producer connect \u0111\u1ebfn message broker \u0111\u1ec3 \u0111\u1ea9y message. Message s\u1ebd \u0111i qua message broker \u0111\u1ec3 \u0111\u1ebfn \u0111\u01b0\u1ee3c consumer. C\u1ea5u tr\u00fac c\u1ee7a message broker ch\u1ec9 g\u1ed3m hai ph\u1ea7n exchange v\u00e0 queue.<\/p>\n<p>Exchange c\u00f3 nhi\u1ec1u lo\u1ea1i. Trong h\u00ecnh v\u1ebd tr\u00ean exchange type l\u00e0 fanout. L\u1ef1a ch\u1ecdn c\u00e1c exchange type kh\u00e1c nhau s\u1ebd d\u1eabn \u0111\u1ebfn kh\u00e1c \u0111\u1ed1i x\u1eed kh\u00e1c nhau c\u1ee7a message broker v\u1edbi th\u00f4ng \u0111i\u1ec7p nh\u1eadn \u0111\u01b0\u1ee3c t\u1eeb producer. Exchange \u0111\u01b0\u1ee3c bind (li\u00ean k\u00eat) \u0111\u1ebfn m\u1ed9t s\u1ed1 queue nh\u1ea5t \u0111\u1ecbnh. V\u1edbi exchange type l\u00e0 fanout, message s\u1ebd \u0111\u01b0\u1ee3c broadcast \u0111\u1ebfn c\u00e1c queue \u0111\u01b0\u1ee3c bind v\u1edbi exchange. Consumer s\u1ebd connect \u0111\u1ebfn message broker \u0111\u1ec3 l\u1ea5y message t\u1eeb c\u00e1c queue.<\/p>\n<h1 class=\"ui dividing header\">C\u00e0i \u0111\u1eb7t v\u00e0 c\u1ea5u h\u00ecnh c\u01a1 b\u1ea3n<\/h1>\n<p>C\u00e1c b\u1ea1n c\u00f3 th\u1ec3 tham kh\u1ea3o h\u01b0\u1edbng d\u1eabn tr\u1ef1c ti\u1ebfp t\u1eeb trang ch\u1ee7 c\u1ee7a rabbitmq:<br \/>\n<a href=\"https:\/\/www.rabbitmq.com\/install-rpm.html\" target=\"_blank\" rel=\"noopener\">https:\/\/www.rabbitmq.com\/install-rpm.html<\/a><\/p>\n<p>V\u00ec rabbitmq \u0111\u01b0\u1ee3c l\u1eadp tr\u00ecnh b\u1eb1ng erlang n\u00ean b\u1ea1n c\u1ea7n c\u00e0i \u0111\u1eb7t erlang tr\u01b0\u1edbc. T\u00f4i c\u00e0i \u0111\u1eb7t erlang t\u1eeb epel repo:<\/p>\n<pre><code class=\"ui segment hljs sql\">wget http:\/\/download.fedoraproject.org\/pub\/epel\/6\/i386\/epel-<span class=\"hljs-operator\"><span class=\"hljs-keyword\">release<\/span>-<span class=\"hljs-number\">6<\/span>-<span class=\"hljs-number\">8.<\/span>noarch.rpm\nrpm -ivh epel-<span class=\"hljs-keyword\">release<\/span>-<span class=\"hljs-number\">6<\/span>-<span class=\"hljs-number\">8.<\/span>noarch.rpm\nyum <span class=\"hljs-keyword\">install<\/span> <span class=\"hljs-comment\">--enablerepo=epel erlang<\/span>\n<\/span><\/code><\/pre>\n<p>Sau \u0111\u00f3, t\u00f4i c\u00e0i ti\u1ebfp rabbitmq:<\/p>\n<pre><code class=\"ui segment hljs groovy\">wget <span class=\"hljs-string\">https:<\/span><span class=\"hljs-comment\">\/\/www.rabbitmq.com\/releases\/rabbitmq-server\/v3.5.2\/rabbitmq-server-3.5.2-1.noarch.rpm<\/span>\nrpm --<span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-string\">https:<\/span><span class=\"hljs-comment\">\/\/www.rabbitmq.com\/rabbitmq-signing-key-public.asc<\/span>\nrpm -ivh rabbitmq-server-<span class=\"hljs-number\">3.5<\/span><span class=\"hljs-number\">.2<\/span>-<span class=\"hljs-number\">1.<\/span>noarch.rpm\n<\/code><\/pre>\n<p>VI\u1ec7c c\u00e0i \u0111\u1eb7t \u0111\u1ebfn \u0111\u00e2y l\u00e0 xong. B\u1ea1n c\u00f3 th\u1ec3 start th\u1eed service c\u1ee7a rabbitmq b\u1eb1ng c\u00e1ch:<br \/>\n<code>service rabbitmq-server start<\/code><\/p>\n<p>C\u1ea5u h\u00ecnh m\u1eabu c\u1ee7a rabbitmq \u0111i k\u00e8m g\u00f3i c\u00e0i \u0111\u1eb7t n\u1eb1m \u1edf:<br \/>\n\/usr\/share\/doc\/rabbitmq-server-3.5.2\/<br \/>\nT\u00f4i copy v\u1ec1 khu v\u1ef1c \u0111\u1eb7t file c\u1ea5u h\u00ecnh c\u1ee7a rabbitmq r\u1ed3i \u0111\u1ed5i t\u00ean:<\/p>\n<pre><code class=\"ui segment hljs gradle\">cp <span class=\"hljs-regexp\">\/usr\/<\/span>share<span class=\"hljs-regexp\">\/doc\/<\/span>rabbitmq-server-<span class=\"hljs-number\">3.5<\/span>.<span class=\"hljs-number\">2<\/span><span class=\"hljs-regexp\">\/rabbitmq.config.example \/<\/span>etc<span class=\"hljs-regexp\">\/rabbitmq\/<\/span>\nmv <span class=\"hljs-regexp\">\/etc\/<\/span>rabbitmq<span class=\"hljs-regexp\">\/rabbitmq.config.example  \/<\/span>etc<span class=\"hljs-regexp\">\/rabbitmq\/<\/span>rabbitmq.config\n<\/code><\/pre>\n<p>C\u1ea5u h\u00ecnh c\u1ee7a rabbitmq m\u1eb7c \u0111\u1ecbnh ch\u1ea1y kh\u00e1 \u1ed5n. C\u00e1c b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng lu\u00f4n m\u00e0 kh\u00f4ng c\u1ea7n b\u1eadn t\u00e2m t\u00f9y ch\u1ec9nh c\u1ea5u h\u00ecnh.<\/p>\n<h1 class=\"ui dividing header\">C\u00e0i \u0111\u1eb7t management plugin<\/h1>\n<p>Rabbitmq c\u00f3 \u0111i k\u00e8m m\u1ed9t plugin cho ph\u00e9p qu\u1ea3n tr\u1ecb ho\u1ea1t \u0111\u1ed9ng qua m\u1ed9t web interface tr\u00f4ng r\u1ea5t tr\u1ef1c quan v\u00e0 th\u00e2n thi\u1ec7n. Nh\u01b0ng m\u1eb7c \u0111\u1ecbnh, plugin n\u00e0y kh\u00f4ng \u0111\u01b0\u1ee3c enable. \u0110\u1ec3 enable, b\u1ea1n th\u1ef1c hi\u1ec7n l\u1ec7nh sau:<\/p>\n<pre><code class=\"ui segment hljs \">rabbitmq-plugins enable rabbitmq_management\n<\/code><\/pre>\n<p>T\u1ea5t c\u1ea3 c\u00e1c ho\u1ea1t \u0111\u1ed9ng qu\u1ea3n tr\u1ecb qua web c\u0169ng c\u00f3 th\u1ec3 th\u1ef1c hi\u1ec7n qua m\u1ed9t command line tool c\u00f3 t\u00ean l\u00e0 rabbitmqadmin. Tool n\u00e0y \u0111i k\u00e8m trong management plugin. B\u1ea1n c\u0169ng ch\u1ec9 c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng n\u00f3 sau khi \u0111\u00e3 enable management plugin.<\/p>\n<p>C\u00e1ch download rabbitmqadmin tool:<\/p>\n<p>T\u00f4i c\u00e0i \u0111\u1eb7t rabbitmq tr\u00ean m\u1ed9t server c\u00f3 ip 192.168.3.252 n\u00ean \u0111\u1ecba ch\u1ec9 download s\u1ebd l\u00e0:<\/p>\n<pre><code class=\"ui segment hljs groovy\"><span class=\"hljs-string\">http:<\/span><span class=\"hljs-comment\">\/\/192.168.3.252:15672\/cli\/rabbitmqadmin<\/span>\n<\/code><\/pre>\n<p>C\u00e1ch s\u1eed d\u1ee5ng tool n\u00e0y trong c\u00e1c t\u00ecnh hu\u1ed1ng c\u1ee5 th\u1ec3 s\u1ebd n\u1eb1m trong c\u00e1c ph\u1ea7n t\u1edbi.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gi\u1edbi thi\u1ec7u RabbitMQ l\u00e0 m\u1ed9t message broker ( message-oriented middleware) s\u1eed d\u1ee5ng giao th\u1ee9c AMQP &#8211; Advanced Message Queue Protocol (\u0110\u00e2y l\u00e0 giao th\u1ee9c ph\u1ed5 bi\u1ebfn, th\u1ef1c t\u1ebf rabbitmq h\u1ed7 tr\u1ee3 nhi\u1ec1u giao th\u1ee9c). RabbitMQ&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-371","post","type-post","status-publish","format-standard","hentry","category-database"],"_links":{"self":[{"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/posts\/371","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/comments?post=371"}],"version-history":[{"count":0,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/posts\/371\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/media?parent=371"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/categories?post=371"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/tags?post=371"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}