{"id":1635,"date":"2012-02-09T17:30:54","date_gmt":"2012-02-09T08:30:54","guid":{"rendered":"http:\/\/www.creationline.com\/?p=1635"},"modified":"2023-08-29T10:32:32","modified_gmt":"2023-08-29T01:32:32","slug":"cloud-foundry%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%88%e3%81%865","status":"publish","type":"post","link":"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi\/1635","title":{"rendered":"Cloud Foundry\u3092\u4f7f\u3063\u3066\u307f\u3088\u3046[5]"},"content":{"rendered":"<h2>node.js\u3068RabbitMQ\u306e\u9023\u643a<\/h2>\n<p><a href=\"http:\/\/www.rabbitmq.com\/\">RabbitMQ<\/a>\u306f\u3001<a href=\"http:\/\/www.amqp.org\/\">Advanced Message Queuing Protocol<\/a>\u3092\u4f7f\u7528\u3059\u308b\u3001\u30e1\u30c3\u30bb\u30fc\u30b8\u6307\u5411\u306e\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3067\u3059\u3002<\/p>\n<p>\u672c\u9805\u3067\u306f\u3001<a href=\"http:\/\/start.cloudfoundry.com\/services\/rabbitmq\/nodejs-rabbitmq.html\">Using RabbitMQ with Node.js<\/a>\u3092\u53c2\u8003\u306b\u3001RabbitMQ\u306b\u63a5\u7d9a\u3059\u308bnode.js\u3067\u4f5c\u6210\u3055\u308c\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u3001Cloud Foundry\u4e0a\u306b\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002<\/p>\n<h3>RabbitMQ\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h3>\n<p>RabbitMQ\u30b5\u30fc\u30d0\u3092\u30ed\u30fc\u30ab\u30eb\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<\/p>\n<pre>root@debian:~# aptitude install rabbitmq-server\n\t:\nSetting up erlang-base (1:14.a-dfsg-3) ...\nSearching for services which depend on erlang and should be started...none found.\nSetting up erlang-syntax-tools (1:14.a-dfsg-3) ...\nSetting up erlang-asn1 (1:14.a-dfsg-3) ...\nSetting up erlang-mnesia (1:14.a-dfsg-3) ...\nSetting up erlang-runtime-tools (1:14.a-dfsg-3) ...\nSetting up erlang-crypto (1:14.a-dfsg-3) ...\nSetting up erlang-public-key (1:14.a-dfsg-3) ...\nSetting up erlang-ssl (1:14.a-dfsg-3) ...\nSetting up erlang-inets (1:14.a-dfsg-3) ...\nSetting up erlang-corba (1:14.a-dfsg-3) ...\nSetting up erlang-xmerl (1:14.a-dfsg-3) ...\nSetting up erlang-edoc (1:14.a-dfsg-3) ...\nSetting up erlang-docbuilder (1:14.a-dfsg-3) ...\nSetting up erlang-erl-docgen (1:14.a-dfsg-3) ...\nSetting up erlang-eunit (1:14.a-dfsg-3) ...\nSetting up erlang-ic (1:14.a-dfsg-3) ...\nSetting up erlang-inviso (1:14.a-dfsg-3) ...\nSetting up libltdl7 (2.2.6b-2) ...\nSetting up erlang-snmp (1:14.a-dfsg-3) ...\nSetting up erlang-os-mon (1:14.a-dfsg-3) ...\nSetting up erlang-parsetools (1:14.a-dfsg-3) ...\nSetting up erlang-percept (1:14.a-dfsg-3) ...\nSetting up erlang-ssh (1:14.a-dfsg-3) ...\nSetting up erlang-webtool (1:14.a-dfsg-3) ...\nSetting up erlang-tools (1:14.a-dfsg-3) ...\nSetting up libsctp1 (1.0.11+dfsg-1) ...\nSetting up lksctp-tools (1.0.11+dfsg-1) ...\nSetting up odbcinst (2.2.14p2-1) ...\nSetting up odbcinst1debian2 (2.2.14p2-1) ...\nSetting up unixodbc (2.2.14p2-1) ...\nSetting up erlang-odbc (1:14.a-dfsg-3) ...\nSetting up erlang-nox (1:14.a-dfsg-3) ...\nSetting up rabbitmq-server (2.6.1-1) ...\nAdding group `rabbitmq' (GID 105) ...\nDone.\nAdding system user `rabbitmq' (UID 103) ...\nAdding new user `rabbitmq' (UID 103) with group `rabbitmq' ...\nNot creating home directory `\/var\/lib\/rabbitmq'.\nStarting rabbitmq-server: SUCCESS\nrabbitmq-server.\n\nroot@debian:~#<\/pre>\n<h3>RabbitMQ\u3092\u5229\u7528\u3059\u308bnode.js\u306e\u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4f5c\u6210<\/h3>\n<p>\u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<pre>cf@debian:~$ mkdir rabbitmq-node\ncf@debian:~$ cd rabbitmq-node\ncf@debian:~\/rabbitmq-node$<\/pre>\n<p>node.js\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u305f\u3081\u306e\u3001\u4f9d\u5b58\u95a2\u4fc2\u3092\u8a18\u8ff0\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<pre>cf@debian:~\/rabbitmq-node$ cat &gt; package.json\n{\n    \"name\":\"node-amqp-demo\",\n    \"version\":\"0.0.1\",\n    \"dependencies\": {\n        \"amqp\":\"&gt;= 0.1.0\",\n        \"sanitizer\": \"*\"\n    }\n}\ncf@debian:~\/rabbitmq-node$<\/pre>\n<p>npm\u30b3\u30de\u30f3\u30c9\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u884c\u3044\u307e\u3059\u3002<\/p>\n<pre>cf@debian:~\/rabbitmq-node$ npm install\nnpm WARN publish-everything amqp@0.1.1 Adding entire directory to tarball. Please add a\nnpm WARN publish-everything amqp@0.1.1 .npmignore or specify a 'files' array in the package.json\nnpm ok\ncf@debian:~\/rabbitmq-node$<\/pre>\n<p>\u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<pre>cf@debian:~\/rabbitmq-node$ cat &gt; app.js\nvar http = require('http');\nvar amqp = require('amqp');\nvar URL = require('url');\nvar htmlEscape = require('sanitizer').escape;\n\nfunction rabbitUrl() {\n  if (process.env.VCAP_SERVICES) {\n    conf = JSON.parse(process.env.VCAP_SERVICES);\n    return conf['rabbitmq-2.4'][0].credentials.url;\n  }\n  else {\n    return \"amqp:\/\/localhost\";\n  }\n}\n\nvar port = process.env.VCAP_APP_PORT || 3000;\n\nvar messages = [];\n\nfunction setup() {\n\n  var exchange = conn.exchange('cf-demo', {'type': 'fanout', durable: false}, function() {\n\n    var queue = conn.queue('', {durable: false, exclusive: true},\n    function() {\n      queue.subscribe(function(msg) {\n        messages.push(htmlEscape(msg.body));\n        if (messages.length &gt; 10) {\n          messages.shift();\n        }\n      });\n      queue.bind(exchange.name, '');\n    });\n    queue.on('queueBindOk', function() { httpServer(exchange); });\n  });\n}\n\nfunction httpServer(exchange) {\n  var serv = http.createServer(function(req, res) {\n    var url = URL.parse(req.url);\n    if (req.method == 'GET' &amp;&amp; url.pathname == '\/env') {\n      printEnv(res);\n    }\n    else if (req.method == 'GET' &amp;&amp; url.pathname == '\/') {\n      res.statusCode = 200;\n      openHtml(res);\n      writeForm(res);\n      writeMessages(res);\n      closeHtml(res);\n    }\n    else if (req.method == 'POST' &amp;&amp; url.pathname == '\/') {\n      chunks = '';\n      req.on('data', function(chunk) { chunks += chunk; });\n      req.on('end', function() {\n        msg = unescapeFormData(chunks.split('=')[1]);\n        exchange.publish('', {body: msg});\n        res.statusCode = 303;\n        res.setHeader('Location', '\/');\n        res.end();\n      });\n    }\n    else {\n      res.statusCode = 404;\n      res.end(\"This is not the page you were looking for.\");\n    }\n  });\n  serv.listen(port);\n}\n\nconsole.log(\"Starting ... AMQP URL: \" + rabbitUrl());\nvar conn = amqp.createConnection({url: rabbitUrl()});\nconn.on('ready', setup);\n\n\/\/ ---- helpers\n\nfunction openHtml(res) {\n  res.write(\"&lt;html&gt;&lt;head&gt;&lt;title&gt;Node.js \/ RabbitMQ demo&lt;\/title&gt;&lt;\/head&gt;&lt;body&gt;\");\n}\n\nfunction closeHtml(res) {\n  res.end(\"&lt;\/body&gt;&lt;\/html&gt;\");\n}\n\nfunction writeMessages(res) {\n  res.write('&lt;h2&gt;Messages&lt;\/h2&gt;');\n  res.write('&lt;ol&gt;');\n  for (i in messages) {\n    res.write('&lt;li&gt;' + messages[i] + '&lt;\/li&gt;');\n  }\n  res.write('&lt;\/ol&gt;');\n}\n\nfunction writeForm(res) {\n  res.write('&lt;form method=\"post\"&gt;');\n  res.write('&lt;input name=\"data\"\/&gt;&lt;input type=\"submit\"\/&gt;');\n  res.write('&lt;\/form&gt;');\n}\n\nfunction printEnv(res) {\n  res.statusCode = 200;\n  openHtml(res);\n  for (entry in process.env) {\n    res.write(entry + \"=\" + process.env[entry] + \"&lt;br\/&gt;\");\n  }\n  closeHtml(res);\n}\n\nfunction unescapeFormData(msg) {\n  return unescape(msg.replace('+', ' '));\n}\ncf@debian:~\/rabbitmq-node$<\/pre>\n<p>\u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n<pre>cf@debian:~\/rabbitmq-node$ node app.js\nStarting ... AMQP URL: amqp:\/\/localhost<\/pre>\n<p>\u5225\u30b7\u30a7\u30eb\u304b\u3089wget\u30b3\u30de\u30f3\u30c9\u3067\u63a5\u7d9a\u3057\u307e\u3059\u3002<\/p>\n<pre>cf@debian:~$ wget -q -O - http:\/\/localhost:3000\/\n&lt;html&gt;&lt;head&gt;&lt;title&gt;Node.js \/ RabbitMQ demo&lt;\/title&gt;&lt;\/head&gt;&lt;body&gt;&lt;form method=\"post\"&gt;&lt;input name=\"data\"\/&gt;&lt;input type=\"submit\"\/&gt;&lt;\/form&gt;&lt;h2&gt;Messages&lt;\/h2&gt;&lt;ol&gt;&lt;\/ol&gt;&lt;\/body&gt;&lt;\/html&gt;cf@debian:~$<\/pre>\n<p>\u6b21\u306b\u3001\u30c7\u30fc\u30bf\u3092POST\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n<pre>cf@debian:~$ wget -q --post-data=\"data=TEST\" -O - http:\/\/localhost:3000\/\n&lt;html&gt;&lt;head&gt;&lt;title&gt;Node.js \/ RabbitMQ demo&lt;\/title&gt;&lt;\/head&gt;&lt;body&gt;&lt;form method=\"post\"&gt;&lt;input name=\"data\"\/&gt;&lt;input type=\"submit\"\/&gt;&lt;\/form&gt;&lt;h2&gt;Messages&lt;\/h2&gt;&lt;ol&gt;&lt;\/ol&gt;&lt;\/body&gt;&lt;\/html&gt;cf@debian:~$<\/pre>\n<p>POST\u3057\u305f\u30c7\u30fc\u30bf\u304c\u8868\u793a\u3055\u308c\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002<\/p>\n<pre>cf@debian:~$ wget -q -O - http:\/\/localhost:3000\/\n&lt;html&gt;&lt;head&gt;&lt;title&gt;Node.js \/ RabbitMQ demo&lt;\/title&gt;&lt;\/head&gt;&lt;body&gt;&lt;form method=\"post\"&gt;&lt;input name=\"data\"\/&gt;&lt;input type=\"submit\"\/&gt;&lt;\/form&gt;&lt;h2&gt;Messages&lt;\/h2&gt;&lt;ol&gt;&lt;li&gt;TEST&lt;\/li&gt;&lt;\/ol&gt;&lt;\/body&gt;&lt;\/html&gt;cf@debian:~$<\/pre>\n<p>\u4ee5\u4e0a\u306e\u3088\u3046\u306b\u52d5\u4f5c\u304c\u78ba\u8a8d\u3067\u304d\u305f\u3089\u3001Cloud Foundry\u4e0a\u306b\u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002\u3053\u306e\u969b\u3001RabbitMQ\u3068\u95a2\u9023\u4ed8\u3051\u3092\u884c\u3063\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n<pre>cf@debian:~\/rabbitmq-node$ vmc push\nWould you like to deploy from the current directory? [Yn]:<\/pre>\n<p><strong>y<\/strong><\/p>\n<pre>Application Name:<\/pre>\n<p><strong>rabbitmq-node<\/strong><\/p>\n<pre>Application Deployed URL [rabbitmq-node.cloudfoundry.com]:<\/pre>\n<p><strong>rabbitmq-node-creationline.cloudfoundry.com<\/strong><\/p>\n<pre>Detected a Node.js Application, is this correct? [Yn]:<\/pre>\n<p><strong>y<\/strong><\/p>\n<pre>Memory Reservation (64M, 128M, 256M, 512M, 1G, 2G) [64M]:\nCreating Application: OK\nWould you like to bind any services to 'rabbitmq-node'? [yN]:<\/pre>\n<p><strong>y<\/strong><\/p>\n<pre>The following system services are available\n1: mongodb\n2: mysql\n3: postgresql\n4: rabbitmq\n5: redis\nPlease select one you wish to provision:<\/pre>\n<p><strong>4<\/strong><\/p>\n<pre>Specify the name of the service [rabbitmq-ec036]:\nCreating Service: OK\nBinding Service [rabbitmq-ec036]: OK\nUploading Application:\n  Checking for available resources: OK\n  Packing application: OK\n  Uploading (1K): OK\nPush Status: OK\nStaging Application: OK\nStarting Application: .......Error:\nApplication 'rabbitmq-node's state is undetermined, not enough information available.\n\ncf@debian:~\/rabbitmq-node$<\/pre>\n<p>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8d77\u52d5\u306b\u5931\u6557\u3057\u305f\u306e\u3067\u3001\u30ed\u30b0\u306e\u78ba\u8a8d\u3092\u884c\u3044\u307e\u3059\u3002<\/p>\n<pre>cf@debian:~\/rabbitmq-node$ vmc crashlogs rabbitmq-node\n====&gt; logs\/stderr.log &lt;====\n\nnode.js:134\n        throw e; \/\/ process.nextTick error, or 'error' event on first tick\n        ^\nError: Cannot find module 'amqp'\n    at Function._resolveFilename (module.js:326:11)\n    at Function._load (module.js:271:25)\n    at require (module.js:355:19)\n    at Object.&lt;anonymous&gt; (\/var\/vcap\/data\/dea\/apps\/rabbitmq-node-0-f77585e3130e2d0644c1004455eaf707\/app\/app.js:2:12)\n    at Module._compile (module.js:411:26)\n    at Object..js (module.js:417:10)\n    at Module.load (module.js:343:31)\n    at Function._load (module.js:302:12)\n    at Array.&lt;anonymous&gt; (module.js:430:10)\n    at EventEmitter._tickCallback (node.js:126:26)\n\ncf@debian:~\/rabbitmq-node$<\/pre>\n<p>node.js\u3068MongoDB\u3092\u9023\u643a\u3055\u305b\u305f\u3068\u304d\u3068\u540c\u3058\u304f\u3001RabbitMQ\u7528\u306enode.js\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3068\u4e00\u7dd2\u306b\u30c7\u30d7\u30ed\u30a4\u3057\u306a\u3051\u308c\u3070\u3044\u3051\u306a\u3044\u3088\u3046\u3067\u3059\u3002<\/p>\n<p>\u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3001\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u683c\u7d0d\u3059\u308b\u305f\u3081\u306enode_modules\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u3001\u305d\u3053\u306b\u5fc5\u8981\u306a\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u30b3\u30d4\u30fc\u3057\u307e\u3059\u3002<\/p>\n<pre>cf@debian:~\/rabbitmq-node$ mkdir node_modules\ncf@debian:~\/rabbitmq-node$ cp -a ..\/.node_libraries\/.npm\/amqp\/active\/package node_modules\/amqp\ncf@debian:~\/rabbitmq-node$ cp -a ..\/.node_libraries\/.npm\/sanitizer\/active\/package node_modules\/sanitizer\ncf@debian:~\/rabbitmq-node$<\/pre>\n<p>\u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u66f4\u65b0\u3057\u3001\u5fc5\u8981\u306a\u30e2\u30b8\u30e5\u30fc\u30eb\u3092Cloud Foundry\u4e0a\u306b\u8ee2\u9001\u3057\u307e\u3059\u3002<\/p>\n<pre>cf@debian:~\/rabbitmq-node$ vmc update rabbitmq-node\nUploading Application:\n  Checking for available resources: OK\n  Processing resources: OK\n  Packing application: OK\n  Uploading (1K): OK\nPush Status: OK\nStopping Application: OK\nStaging Application: OK\nStarting Application: OK                                                        \n\ncf@debian:~\/rabbitmq-node$<\/pre>\n<p>Web\u30d6\u30e9\u30a6\u30b6\u3067 http:\/\/rabbitmq-node-creationline.cloudfoundry.com\/ \u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002<\/p>\n<pre>[          ] [\u9001\u4fe1]\n\nMessages<\/pre>\n<p>\u4ee5\u4e0a\u306e\u3088\u3046\u306a\u30d5\u30a9\u30fc\u30e0\u304c\u8868\u793a\u3055\u308c\u308c\u3070\u52d5\u4f5c\u3057\u3066\u3044\u307e\u3059\u3002\u4f8b\u3048\u3070\u300cTEST\u300d\u3068\u30d5\u30a9\u30fc\u30e0\u306b\u5165\u529b\u3057\u3066\u300c\u9001\u4fe1\u300d\u30dc\u30bf\u30f3\u3092\u62bc\u3059\u3068\u3001<\/p>\n<pre>[          ] [\u9001\u4fe1]\n\nMessages\n\n  1. TEST<\/pre>\n<p>\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>node.js\u3068RabbitMQ\u306e\u9023\u643a RabbitMQ\u306f\u3001Advanced Message Queuing Protocol\u3092\u4f7f\u7528\u3059\u308b\u3001\u30e1\u30c3\u30bb\u30fc\u30b8\u6307\u5411\u306e\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3067\u3059\u3002 \u672c\u9805\u3067\u306f\u3001Using RabbitMQ wit [&#8230;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[31],"tags":[],"class_list":["post-1635","post","type-post","status-publish","format-standard","hentry","category-higuchi"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Cloud Foundry\u3092\u4f7f\u3063\u3066\u307f\u3088\u3046[5] - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3<\/title>\n<meta name=\"description\" content=\"d-higuchi |node.js\u3068RabbitMQ\u306e\u9023\u643a RabbitMQ\u306f\u3001Advanced Message Queuing\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.creationline.com\/tech-blog\/1635\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cloud Foundry\u3092\u4f7f\u3063\u3066\u307f\u3088\u3046[5] - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\" \/>\n<meta property=\"og:description\" content=\"d-higuchi |node.js\u3068RabbitMQ\u306e\u9023\u643a RabbitMQ\u306f\u3001Advanced Message Queuing\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.creationline.com\/tech-blog\/1635\" \/>\n<meta property=\"og:site_name\" content=\"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/creationline\" \/>\n<meta property=\"article:published_time\" content=\"2012-02-09T08:30:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-29T01:32:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2026\/01\/screenshot.png\" \/>\n\t<meta property=\"og:image:width\" content=\"470\" \/>\n\t<meta property=\"og:image:height\" content=\"394\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Daisuke Higuchi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@creationline\" \/>\n<meta name=\"twitter:site\" content=\"@creationline\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daisuke Higuchi\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/1635#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/1635\"},\"author\":{\"name\":\"Daisuke Higuchi\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#\\\/schema\\\/person\\\/16f1373831fb6fd17387f16ae1195206\"},\"headline\":\"Cloud Foundry\u3092\u4f7f\u3063\u3066\u307f\u3088\u3046[5]\",\"datePublished\":\"2012-02-09T08:30:54+00:00\",\"dateModified\":\"2023-08-29T01:32:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/1635\"},\"wordCount\":57,\"articleSection\":[\"d-higuchi\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/1635\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/1635\",\"name\":\"Cloud Foundry\u3092\u4f7f\u3063\u3066\u307f\u3088\u3046[5] - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#website\"},\"datePublished\":\"2012-02-09T08:30:54+00:00\",\"dateModified\":\"2023-08-29T01:32:32+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#\\\/schema\\\/person\\\/16f1373831fb6fd17387f16ae1195206\"},\"description\":\"d-higuchi |node.js\u3068RabbitMQ\u306e\u9023\u643a RabbitMQ\u306f\u3001Advanced Message Queuing\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/1635#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/1635\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/1635#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"HOME\",\"item\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cloud Foundry\u3092\u4f7f\u3063\u3066\u307f\u3088\u3046[5]\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#website\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/\",\"name\":\"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\",\"description\":\"\u30a2\u30b8\u30e3\u30a4\u30eb\uff06DevOps\u3001\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u3001AI\uff06LLM\u306e\u5148\u7aef\u6280\u8853\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#\\\/schema\\\/person\\\/16f1373831fb6fd17387f16ae1195206\",\"name\":\"Daisuke Higuchi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/d-higuchi-wp-icon-230x230.png\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/d-higuchi-wp-icon-230x230.png\",\"contentUrl\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/d-higuchi-wp-icon-230x230.png\",\"caption\":\"Daisuke Higuchi\"},\"description\":\"Chef\u30fbDocker\u30fbMirantis\u88fd\u54c1\u306a\u3069\u306e\u6280\u8853\u8981\u7d20\u306b\u52a0\u3048\u3066\u3001\u4f1a\u8b70\u306e\u9032\u3081\u65b9\u30fb\u6587\u7ae0\u306e\u66f8\u304d\u65b9\u306a\u3069\u306e\u696d\u52d9\u6539\u5584\u306b\u3082\u53d6\u308a\u7d44\u3093\u3067\u3044\u307e\u3059\u3002\u300cChef\u6d3b\u7528\u30ac\u30a4\u30c9\u300d\u5171\u8457\u306e\u307b\u304b\u3001Debian Official Developer\u3082\u3084\u3063\u3066\u3044\u307e\u3059\u3002\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/author\\\/higuchi\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cloud Foundry\u3092\u4f7f\u3063\u3066\u307f\u3088\u3046[5] - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","description":"d-higuchi |node.js\u3068RabbitMQ\u306e\u9023\u643a RabbitMQ\u306f\u3001Advanced Message Queuing","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.creationline.com\/tech-blog\/1635","og_locale":"ja_JP","og_type":"article","og_title":"Cloud Foundry\u3092\u4f7f\u3063\u3066\u307f\u3088\u3046[5] - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","og_description":"d-higuchi |node.js\u3068RabbitMQ\u306e\u9023\u643a RabbitMQ\u306f\u3001Advanced Message Queuing","og_url":"https:\/\/www.creationline.com\/tech-blog\/1635","og_site_name":"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","article_publisher":"https:\/\/www.facebook.com\/creationline","article_published_time":"2012-02-09T08:30:54+00:00","article_modified_time":"2023-08-29T01:32:32+00:00","og_image":[{"width":470,"height":394,"url":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2026\/01\/screenshot.png","type":"image\/png"}],"author":"Daisuke Higuchi","twitter_card":"summary_large_image","twitter_creator":"@creationline","twitter_site":"@creationline","twitter_misc":{"\u57f7\u7b46\u8005":"Daisuke Higuchi","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"6\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.creationline.com\/tech-blog\/1635#article","isPartOf":{"@id":"https:\/\/www.creationline.com\/tech-blog\/1635"},"author":{"name":"Daisuke Higuchi","@id":"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/16f1373831fb6fd17387f16ae1195206"},"headline":"Cloud Foundry\u3092\u4f7f\u3063\u3066\u307f\u3088\u3046[5]","datePublished":"2012-02-09T08:30:54+00:00","dateModified":"2023-08-29T01:32:32+00:00","mainEntityOfPage":{"@id":"https:\/\/www.creationline.com\/tech-blog\/1635"},"wordCount":57,"articleSection":["d-higuchi"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/www.creationline.com\/tech-blog\/1635","url":"https:\/\/www.creationline.com\/tech-blog\/1635","name":"Cloud Foundry\u3092\u4f7f\u3063\u3066\u307f\u3088\u3046[5] - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","isPartOf":{"@id":"https:\/\/www.creationline.com\/tech-blog\/#website"},"datePublished":"2012-02-09T08:30:54+00:00","dateModified":"2023-08-29T01:32:32+00:00","author":{"@id":"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/16f1373831fb6fd17387f16ae1195206"},"description":"d-higuchi |node.js\u3068RabbitMQ\u306e\u9023\u643a RabbitMQ\u306f\u3001Advanced Message Queuing","breadcrumb":{"@id":"https:\/\/www.creationline.com\/tech-blog\/1635#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.creationline.com\/tech-blog\/1635"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.creationline.com\/tech-blog\/1635#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"HOME","item":"https:\/\/www.creationline.com\/tech-blog"},{"@type":"ListItem","position":2,"name":"Cloud Foundry\u3092\u4f7f\u3063\u3066\u307f\u3088\u3046[5]"}]},{"@type":"WebSite","@id":"https:\/\/www.creationline.com\/tech-blog\/#website","url":"https:\/\/www.creationline.com\/tech-blog\/","name":"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","description":"\u30a2\u30b8\u30e3\u30a4\u30eb\uff06DevOps\u3001\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u3001AI\uff06LLM\u306e\u5148\u7aef\u6280\u8853","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.creationline.com\/tech-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/16f1373831fb6fd17387f16ae1195206","name":"Daisuke Higuchi","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/08\/d-higuchi-wp-icon-230x230.png","url":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/08\/d-higuchi-wp-icon-230x230.png","contentUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/08\/d-higuchi-wp-icon-230x230.png","caption":"Daisuke Higuchi"},"description":"Chef\u30fbDocker\u30fbMirantis\u88fd\u54c1\u306a\u3069\u306e\u6280\u8853\u8981\u7d20\u306b\u52a0\u3048\u3066\u3001\u4f1a\u8b70\u306e\u9032\u3081\u65b9\u30fb\u6587\u7ae0\u306e\u66f8\u304d\u65b9\u306a\u3069\u306e\u696d\u52d9\u6539\u5584\u306b\u3082\u53d6\u308a\u7d44\u3093\u3067\u3044\u307e\u3059\u3002\u300cChef\u6d3b\u7528\u30ac\u30a4\u30c9\u300d\u5171\u8457\u306e\u307b\u304b\u3001Debian Official Developer\u3082\u3084\u3063\u3066\u3044\u307e\u3059\u3002","url":"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi"}]}},"_links":{"self":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts\/1635","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/comments?post=1635"}],"version-history":[{"count":1,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts\/1635\/revisions"}],"predecessor-version":[{"id":65686,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts\/1635\/revisions\/65686"}],"wp:attachment":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/media?parent=1635"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/categories?post=1635"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/tags?post=1635"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}