|
@@ -2,6 +2,7 @@
|
|
|
|
|
|
namespace backend\forms;
|
|
namespace backend\forms;
|
|
|
|
|
|
|
|
+use common\logic\LoginHandle;
|
|
use PhpAmqpLib\Message\AMQPMessage;
|
|
use PhpAmqpLib\Message\AMQPMessage;
|
|
use components\service\AmqpConfig;
|
|
use components\service\AmqpConfig;
|
|
use components\service\Redis;
|
|
use components\service\Redis;
|
|
@@ -122,6 +123,8 @@ class MessageForm extends BaseForm
|
|
[['name', 'count'], 'required', 'on' => ['consume']],
|
|
[['name', 'count'], 'required', 'on' => ['consume']],
|
|
['count', 'integer', 'min' => 1, 'max' => 65000, 'message' => 1205,
|
|
['count', 'integer', 'min' => 1, 'max' => 65000, 'message' => 1205,
|
|
'tooSmall' => 1206, 'on' => ['consume']],
|
|
'tooSmall' => 1206, 'on' => ['consume']],
|
|
|
|
+ ['type', 'default', 'value' => 'client', 'on' => 'consume'],
|
|
|
|
+ ['type', 'in', 'range' => ['server', 'client'], 'message' => 1302, 'on' => 'consume'],
|
|
|
|
|
|
/* delete & ack */
|
|
/* delete & ack */
|
|
[['mids', 'name'], 'required', 'on' => ['delete', 'ack']],
|
|
[['mids', 'name'], 'required', 'on' => ['delete', 'ack']],
|
|
@@ -315,6 +318,14 @@ class MessageForm extends BaseForm
|
|
public function consumeMessage()
|
|
public function consumeMessage()
|
|
{
|
|
{
|
|
$q_name = $this->name;
|
|
$q_name = $this->name;
|
|
|
|
+ if ($this->type == 'server') {
|
|
|
|
+ $function = '_closure' . ucfirst($q_name);
|
|
|
|
+ if ( !method_exists($this, $function) )
|
|
|
|
+ throw new Exception(1303);
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+ $function = 'closureConsume';
|
|
|
|
+ }
|
|
|
|
|
|
$connect = $this->getConnect();
|
|
$connect = $this->getConnect();
|
|
$channel = $connect->channel();
|
|
$channel = $connect->channel();
|
|
@@ -329,7 +340,7 @@ class MessageForm extends BaseForm
|
|
try {
|
|
try {
|
|
$min = min($this->count, $total);
|
|
$min = min($this->count, $total);
|
|
|
|
|
|
- $callback = function ($msg) use($q_name) {call_user_func_array([$this, 'closureConsume'], [$msg, $q_name]);};
|
|
|
|
|
|
+ $callback = function ($msg) use($q_name, $function) {call_user_func_array([$this, $function], [$msg, $q_name]);};
|
|
$channel->basic_qos(0, $min, null);
|
|
$channel->basic_qos(0, $min, null);
|
|
$channel->basic_consume($q_name,
|
|
$channel->basic_consume($q_name,
|
|
'', false, false, false, false, $callback);
|
|
'', false, false, false, false, $callback);
|
|
@@ -522,4 +533,28 @@ class MessageForm extends BaseForm
|
|
throw new Exception(1001, $e->getMessage());
|
|
throw new Exception(1001, $e->getMessage());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ private function _closureLogin($msg, $queue)
|
|
|
|
+ {
|
|
|
|
+ $data = ['mid' => '', 'body' => '', 'response' => '', 'error' => ''];
|
|
|
|
+ try {
|
|
|
|
+ $data['mid'] = $msg->get('message_id');
|
|
|
|
+ $data['body'] = $msg->body;
|
|
|
|
+ if ($data['mid']) {
|
|
|
|
+ $handle = new LoginHandle();
|
|
|
|
+ $data['response'] = $handle->login($msg->body, $queue, $data['mid']);
|
|
|
|
+
|
|
|
|
+ $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
|
|
|
|
+ Redis::set($queue, $data['mid'], 'status', AmqpConfig::STATUS_HAND_OK);
|
|
|
|
+ Redis::set($queue, $data['mid'], 'result', $data['response']);
|
|
|
|
+ Redis::expire($queue, $data['mid'], 'result', 3600);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } catch (\Exception $e) {
|
|
|
|
+ $data['error'] = $e->getMessage();
|
|
|
|
+
|
|
|
|
+ } finally {
|
|
|
|
+ $this->_result[] = $data;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|