{"id":334,"date":"2017-07-04T18:23:22","date_gmt":"2017-07-04T10:23:22","guid":{"rendered":"http:\/\/blog.inforere.com\/?p=334"},"modified":"2017-07-06T18:23:02","modified_gmt":"2017-07-06T10:23:02","slug":"rabbitmq","status":"publish","type":"post","link":"https:\/\/blog.inforere.com\/?p=334","title":{"rendered":"RabbitMQ"},"content":{"rendered":"<h2>\u5e94\u7528\u573a\u666f<\/h2>\n<p>http:\/\/www.rabbitmq.com\/tutorials\/tutorial-five-php.html<\/p>\n<p><a href=\"http:\/\/www.rabbitmq.com\/amqp-0-9-1-reference.html#exchange.declare.internal\">Amqp\u534f\u8bae<\/a><br \/>\n<a href=\"http:\/\/www.rabbitmq.com\/devtools.html\">php\u5ba2\u6237\u7aef<\/a><br \/>\nhttp:\/\/www.rabbitmq.com\/queues.html<br \/>\n\u6709\u6548\u671f\u00a0http:\/\/www.rabbitmq.com\/ttl.html<\/p>\n<h1 id=\"h1-u5b89u88c5u6559u7a0b\">\u5b89\u88c5\u6559\u7a0b<\/h1>\n<ul>\n<li><a title=\"\u5b98\u65b9\u6559\u7a0b\" href=\"http:\/\/www.rabbitmq.com\/install-rpm.html\">\u5b98\u65b9\u6559\u7a0b<\/a><\/li>\n<li><a title=\"\u4e0b\u8f7d\u5730\u5740\" href=\"http:\/\/www.rabbitmq.com\/releases\/rabbitmq-server\/\">\u4e0b\u8f7d\u5730\u5740<\/a><\/li>\n<\/ul>\n<pre class=\"lang:default decode:true \">yum install erlang --enablerepo=epel\r\nwget https:\/\/github.com\/rabbitmq\/rabbitmq-server\/releases\/download\/rabbitmq_v3_5_8\/rabbitmq-server-3.5.8-1.noarch.rpm\r\nrpm --import https:\/\/www.rabbitmq.com\/rabbitmq-release-signing-key.asc\r\nyum install rabbitmq-server-3.5.8-1.noarch.rpm<\/pre>\n<h2 id=\"h2--web\">Web\u63d2\u4ef6<\/h2>\n<ul>\n<li><a title=\"web\u7ba1\u7406\u63d2\u4ef6\" href=\"http:\/\/www.rabbitmq.com\/management.html\">\u5b98\u65b9\u6587\u6863<\/a><\/li>\n<li><a title=\"\u7ba1\u7406\u547d\u4ee4\u53c2\u8003\" href=\"http:\/\/www.rabbitmq.com\/man\/rabbitmqctl.1.man.html#\">\u7ba1\u7406\u547d\u4ee4\u53c2\u8003<\/a><\/li>\n<\/ul>\n<pre class=\"lang:default decode:true \">rabbitmq-plugins enable rabbitmq_management\r\nrabbitmqctl change_password guest guest<\/pre>\n<p id=\"h3--web\">http:\/\/ip:15672\/<br \/>\n<span style=\"font-size: 1rem;\">guest guest<\/span><\/p>\n<h2 id=\"h2-u6301u4e45u5316\">\u6301\u4e45\u5316<\/h2>\n<p>\u670d\u52a1\u91cd\u542f\u65f6, \u662f\u5426\u80fd\u6062\u590d\u961f\u5217\u4e2d\u7684\u6570\u636e.<\/p>\n<ul>\n<li>Exchange \u6301\u4e45 durable=True<\/li>\n<li>Queue \u6301\u4e45 durable=True<\/li>\n<li>Message \u6301\u4e45 delivery_mode = 2,<\/li>\n<\/ul>\n<h2>\u00a0\u4f7f\u7528\u793a\u4f8b<\/h2>\n<pre class=\"lang:default decode:true \"># jz.inc.php\r\n&lt;?php\r\n\r\nnamespace rmqTest;\r\n\r\nrequire_once __DIR__ . '\/vendor\/autoload.php';\r\nuse PhpAmqpLib\\Connection\\AMQPStreamConnection;\r\nuse PhpAmqpLib\\Message\\AMQPMessage;\r\nuse PhpAmqpLib\\Channel\\AMQPChannel;\r\n\r\n\/**\r\n * Class JzRabbitMQExample\r\n * @package rmqTest\r\n *\/\r\nclass JzRabbitMQExample {\r\n\r\n    protected $channel;\r\n    protected $connection;\r\n    protected $exchange;\r\n\r\n    \/**\r\n     * JzRabbitMQExample constructor.\r\n     * @param string $exchange\r\n     *\/\r\n    function __construct($exchange = 'topic-jz'){\r\n        $this-&gt;connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');\r\n        $this-&gt;channel = $this-&gt;connection-&gt;channel();;\r\n\r\n        $this-&gt;exchange = $exchange;\r\n        $this-&gt;channel-&gt;exchange_declare($exchange, 'topic', false, false, false);\r\n    }\r\n\r\n    function close(){\r\n        $this-&gt;channel-&gt;close();\r\n        $this-&gt;channel-&gt;close();\r\n    }\r\n}\r\n\r\n\r\n\/**\r\n * Class JzRabbitMQExample\r\n * @package rmqTest\r\n *\/\r\nclass JzProducer extends JzRabbitMQExample{\r\n    \/**\r\n     * @param string $data\r\n     * @param string $routingKey\r\n     *\/\r\n    function sendMessage($data, $routingKey){\r\n        $msg = new AMQPMessage($data);\r\n        $this-&gt;channel-&gt;basic_publish($msg, $this-&gt;exchange, $routingKey);\r\n        echo \" [x] Sent \",$routingKey,':',$data,\" \\n\";\r\n    }\r\n}\r\n\r\n\/**\r\n * Class JzConsumer\r\n *\/\r\nclass JzConsumer extends JzRabbitMQExample{\r\n    \/**\r\n     * @var array\r\n     *\/\r\n    protected $queues = [\r\n        'search' =&gt; [\"*.add\", \"*.edit\", \"*.delete\"],\r\n        'points' =&gt; [\"*.add\", '*.delete'],\r\n        'user-count' =&gt; [\"*.add\", \"*.delete\"]\r\n    ];\r\n\r\n    protected function declareQueue($queueName, $keys = []){\r\n        $this-&gt;channel-&gt;queue_declare($queueName, false, false, false, false);\r\n        if(isset($this-&gt;queues[$queueName])){\r\n            $keys = $this-&gt;queues[$queueName];\r\n        }\r\n\r\n        foreach($keys as $key){\r\n            $this-&gt;channel-&gt;queue_bind($queueName, $this-&gt;exchange, $key);\r\n        }\r\n    }\r\n\r\n    function receive($queueName, $keys) {\r\n        \/\/ \u7ed1\u5b9a\u961f\u5217\r\n        $this-&gt;declareQueue($queueName, $keys);\r\n\r\n        $callback = [$this, 'process'];\r\n        $this-&gt;channel-&gt;basic_consume($queueName, '', false, true, false, false, $callback);\r\n        while(count($this-&gt;channel-&gt;callbacks)) {\r\n            $this-&gt;channel-&gt;wait();\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * @param $msg\r\n     *\/\r\n    function process($msg){\r\n        echo ' [x] ', $msg-&gt;body, \"\\n\";\r\n        var_dump($msg-&gt;delivery_info['delivery_tag']);\r\n        echo \"\\n\";\r\n    }\r\n}\r\n\r\n<\/pre>\n<pre class=\"lang:default decode:true \">&lt;?php\r\n# jz-publish.php\r\n\r\nnamespace rmqTest;\r\n\r\nrequire_once __DIR__ . '\/jz.inc.php';\r\n\r\n$routing_key = isset($argv[1]) &amp;&amp; !empty($argv[1]) ? $argv[1] : 'anonymous.info';\r\n$data = implode(' ', array_slice($argv, 2));\r\nif(empty($data))\r\n    $data = \"Hello World!\";\r\n\r\n$mq = new JzProducer();\r\n$mq-&gt;sendMessage($data, $routing_key);\r\n$mq-&gt;close();<\/pre>\n<pre class=\"lang:default decode:true\">&lt;?php\r\n# jz-receive.php\r\nnamespace rmqTest;\r\n\r\nrequire_once __DIR__ . '\/jz.inc.php';\r\n\r\n$queueName = isset($argv[1]) ?  $argv[1] : '';\r\n$keys = array_slice($argv, 2);\r\nif(empty($queueName) &amp;&amp; empty($keys)) {\r\n    file_put_contents('php:\/\/stderr', \"Usage: $argv[0] queueName [binding_key]\\n\");\r\n    exit(1);\r\n}\r\n\r\necho ' [*] Waiting for logs. To exit press CTRL+C', \"\\n\";\r\n$mq = new JzConsumer();\r\n$mq-&gt;receive($queueName, $keys);\r\n$mq-&gt;close();\r\n\r\n<\/pre>\n<pre class=\"lang:default decode:true \"># cli\r\nphp jz-receive.php search\r\nphp jz-receive.php use-count\r\n\r\nphp jz-publish.php goods.edit 2\r\nphp jz-publish.php news.add 5<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5e94\u7528\u573a\u666f http:\/\/www.rabbitmq.com\/tutorials\/tutorial-five-ph [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20,6],"tags":[42],"_links":{"self":[{"href":"https:\/\/blog.inforere.com\/index.php?rest_route=\/wp\/v2\/posts\/334"}],"collection":[{"href":"https:\/\/blog.inforere.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.inforere.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.inforere.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.inforere.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=334"}],"version-history":[{"count":3,"href":"https:\/\/blog.inforere.com\/index.php?rest_route=\/wp\/v2\/posts\/334\/revisions"}],"predecessor-version":[{"id":337,"href":"https:\/\/blog.inforere.com\/index.php?rest_route=\/wp\/v2\/posts\/334\/revisions\/337"}],"wp:attachment":[{"href":"https:\/\/blog.inforere.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=334"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.inforere.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=334"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.inforere.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}