zhaeng 7 years ago
parent
commit
ea2fc23c62
3 changed files with 176 additions and 0 deletions
  1. 70 0
      backend/controllers/QueueController.php
  2. 28 0
      common/logic/Connection.php
  3. 78 0
      common/logic/Queue.php

+ 70 - 0
backend/controllers/QueueController.php

@@ -0,0 +1,70 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: ZhangFeng
+ * Date: 2018/1/29
+ * Time: 16:00
+ * Description:
+ */
+
+namespace backend\controllers;
+
+use yii\web\Controller;
+use common\logic\Queue;
+
+class QueueController extends Controller
+{
+	/**
+	 * 创建队列
+	 */
+	public function actionCreateQueue()
+	{
+		$params = \Yii::$app->request->get();
+		$queue = new Queue();
+		$queue->load(['Queue' => $params]);
+		if ($queue->validate()) {
+
+			$res = $queue->createQueue();
+			echo json_encode(['code' => 200,'message' => 'OK','data' => ['name' => $res]]);
+		} else {
+			echo json_encode(['code' => 201,'message' => '']);
+		}
+	}
+
+	/**
+	 * 删除队列
+	 */
+	public function actionDeleteQueue()
+	{
+		$params = \Yii::$app->request->get();
+		$queue = new Queue();
+		$queue->load(['Queue' => $params]);
+		if ($queue->validate()) {
+			$res = $queue->deleteQueue();
+			echo json_encode(['code' => 200,'message' => 'OK','data' => [$res]]);
+		} else {
+
+		}
+	}
+
+	/**
+	 * 获取队列列表
+	 */
+	public function actionListQueue()
+	{
+		$params = \Yii::$app->request->get();
+		$queue = new Queue();
+		$queue->load(['Queue' => $params]);
+		if ($queue->validate()) {
+			$res = $queue->listQueue();
+			echo json_encode(['code' => 200,'message' => 'OK','data' => $res]);
+		} else {
+
+		}
+	}
+
+	public function actionSetQueueAttributes()
+	{
+
+	}
+}

+ 28 - 0
common/logic/Connection.php

@@ -0,0 +1,28 @@
+<?php
+namespace common\logic;
+/**
+ * Created by PhpStorm.
+ * User: ZhangFeng
+ * Date: 2018/1/30
+ * Time: 11:41
+ * Description:
+ */
+use PhpAmqpLib\Connection\AMQPStreamConnection;
+
+class Connection
+{
+	private static $_instance = null;
+
+	static $HOST = '192.168.1.183';
+	static $PORT = 5672;
+	static $USER = 'zhaeng';
+	static $PASS = 'zhaeng';
+
+	static function getInstance()
+	{
+		if (is_null(self::$_instance)) {
+			self::$_instance = new AMQPStreamConnection(self::$HOST, self::$PORT, self::$USER, self::$PASS);
+		}
+		return self::$_instance;
+	}
+}

+ 78 - 0
common/logic/Queue.php

@@ -0,0 +1,78 @@
+<?php
+namespace common\logic;
+
+/**
+ * Created by PhpStorm.
+ * User: ZhangFeng
+ * Date: 2018/1/30
+ * Time: 11:39
+ * Description:
+ */
+use components\CUrl;
+use yii\db\ActiveRecord;
+
+
+class Queue extends ActiveRecord
+{
+	public $queue;
+	public $passive;
+	public $durable;
+	public $exclusive;
+	public $auto_delete;
+
+	public $if_unused;
+	public $if_empty;
+	public $nowait;
+	public $ticket;
+
+	public $user;
+	public $pass;
+
+	public function rules()
+	{
+		return [
+			['queue','required','on' => ['delete','create'],'message' => '队列名称为空'],
+			[['passive','exclusive','auto_delete'],'default','value' => false,'on' => 'create'],
+			['durable','default','value' => true,'on' => 'create'],
+			[['if_unused','if_empty','nowait'],'default','on' => 'delete'],
+			['ticket','default','value' => null,'on' => 'delete'],
+			[['user','pass'],'required','on' => 'list','message' => '用户名和密码不能为空']
+		];
+	}
+
+	/**
+	 * @return mixed
+	 */
+	public function createQueue()
+	{
+		$connection = Connection::getInstance();
+		$channel = $connection->channel();
+		$queue = $channel->queue_declare($this->queue, $this->passive, $this->durable, $this->exclusive, $this->auto_delete);
+		return isset($queue[0]) ? : null;
+	}
+
+	/**
+	 * @return mixed
+	 */
+	public function deleteQueue()
+	{
+		$connection = Connection::getInstance();
+		$channel = $connection->channel();
+		$res = $channel->queue_delete($this->queue,$this->if_unused,$this->if_empty,$this->nowait,$this->ticket);
+		return $res;
+	}
+
+	/**
+	 * @return array
+	 */
+	public function listQueue()
+	{
+		$url = 'http://192.168.1.183:15672/api/queues';
+		$curl = new CUrl();
+		$curl->authorize = $this->user . ':' . $this->pass;
+		$res = $curl->get($url);
+		$res = json_decode($res,true);
+		return array_column($res,'name');
+	}
+
+}