/**
  * @brief: 向primary broker 发送一条消息
  * @param BigpipeMessagePackage $msg
  * @return: BigpipePubResult on success or false on failure
  */
 public function send($msg_package)
 {
     if (false === $this->_inited) {
         BigpipeLog::fatal("[%s:%u][%s][publisher is not inited]", __FILE__, __LINE__, __FUNCTION__);
         return false;
     }
     $pipelet_id = $this->_partitioner->get_pipelet_id($msg_package, $this->_num_piplet);
     if ($pipelet_id >= $this->_num_piplet || $pipelet_id < 0) {
         BigpipeLog::fatal("[%s:%u][%s][invalid pipelet][pipelet_id:%u][max_pipelet_id:%u]", __FILE__, __LINE__, __FUNCTION__, $pipelet_id, $this->_num_piplet - 1);
         return false;
     }
     $pub = null;
     if (!isset($this->_pub_list[$pipelet_id])) {
         $pub = new BigpipePublishTask($this->_pipe_name, $pipelet_id, $this->_session, $this->_conf, $this->_meta_adapter);
         // 在pub_list中, 保存pub的引用
         $this->_pub_list[$pipelet_id] =& $pub;
     } else {
         $pub =& $this->_pub_list[$pipelet_id];
     }
     $pub_result = $pub->start();
     if (!$pub_result) {
         BigpipeLog::warning("[%s:%u][%s][fail to start publish task][pipe_name:%u][pipelet_id:%u]", __FILE__, __LINE__, __FUNCTION__, $this->_pipe_name, $pipelet_id);
     } else {
         $pub_result = $pub->send($msg_package);
     }
     if (false === $pub_result) {
         $pub->stop();
         // 发送出现错误,停止task(等待下次重启)
     }
     unset($pub);
     // 主动释放$pub与pub task的联系,否则可能会影响到_pub_list中被引用的元素。
     return $pub_result;
 }