PHPackages                             luoxiaojun1992/laravel-tars - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. luoxiaojun1992/laravel-tars

ActiveLibrary[API Development](/categories/api)

luoxiaojun1992/laravel-tars
===========================

Laravel Tars

0.1.14(4y ago)301.5k9[1 issues](https://github.com/luoxiaojun1992/laravel-tars/issues)[1 PRs](https://github.com/luoxiaojun1992/laravel-tars/pulls)proprietaryPHP

Since Dec 28Pushed 4y ago3 watchersCompare

[ Source](https://github.com/luoxiaojun1992/laravel-tars)[ Packagist](https://packagist.org/packages/luoxiaojun1992/laravel-tars)[ RSS](/packages/luoxiaojun1992-laravel-tars/feed)WikiDiscussions master Synced yesterday

READMEChangelog (10)Dependencies (12)Versions (17)Used By (0)

Laravel Tars Driver
===================

[](#laravel-tars-driver)

中文版
---

[](#中文版)

### 描述

[](#描述)

Tars driver for laravel.

Laravel集成微服务治理框架Tars

### 功能

[](#功能)

- 支持服务打包
- 支持Laravel/Lumen原生开发
- 支持TarsConfig
- 支持TarsLog
- 支持网关注册下线
- 支持请求开始(laravel.tars.requesting)、请求结束(laravel.tars.requested)事件
- 支持echo输出内容
- 支持http和tars协议
- 支持zipkin分布式追踪(已移除，可以使用[laravel-zipkin扩展包](https://github.com/luoxiaojun1992/laravel-zipkin))

### 限制

[](#限制)

- 受限于框架本身的设计，不支持协程

### 环境依赖

[](#环境依赖)

1. Laravel/Lumen5.x
2. Tars-PHP

### 安装

[](#安装)

1. 创建项目

    创建Tars项目目录结构(scripts、src、tars)，Laravel/Lumen项目放在src目录下
2. 安装Laravel Tars包

    更新Composer依赖

    ```
    composer require "luoxiaojun1992/laravel-tars:*"
    ```

    或添加 requirement 到 composer.json

    ```
    {
      "require": {
        "luoxiaojun1992/laravel-tars": "*"
      }
    }
    ```

    添加ServiceProvider，编辑src/bootstrap/app.php

    ```
    $app->register(\Lxj\Laravel\Tars\ServiceProvider::class);
    ```

    初始化Laravel Tars

    ```
    php artisan vendor:publish --tag=tars

    ```
3. 修改配置文件src/config/tars.php文件proto字段，替换appName、serverName、objName
4. 如果使用http协议，且需要自动注册到网关(目前仅支持Kong)，修改配置文件src/config/tars.php

    ```
    'registries' => [
         [
             'type' => 'kong',
             'url' => 'http://kong:8001/upstreams/tars_mysql8/targets', //根据实际情况填写
         ]
    ]
    ```
5. 配置中心(TarsConfig)、日志服务(TarsLog)

    服务启动时会自动拉取配置，如果需要记录日志，可以使用类似`Log::info('test log');`

    如果需要指定TarsLog记录的最低日志级别，修改配置文件src/config/tars.php

    ```
    'log_level' => \Monolog\Logger::INFO
    ```
6. 如果使用http协议，按框架原生方式编写代码

    ```
     $router->get('/test', function () {
         \Illuminate\Support\Facades\Log::info('laravel tars test log');
         return 'Laravel Tars Test Success';
     });
    ```
7. 如果使用tars协议

    在tars目录下编写tars接口描述文件，修改配置文件src/config/tars文件proto字段，新增tarsFiles

    在scripts目录执行编译脚本生成接口代码

    ```
    /bin/bash tars2php.sh
    ```

    在src/app/Tars/impl目录下创建接口实现类，编写业务逻辑代码

    修改src/config/tars.php文件services字段，替换接口和接口实现命名空间
8. 搭建Tars-PHP开发环境

    如果使用http协议，请参考[TARS-PHP-HTTP服务端与客户端开发](https://tangramor.gitlab.io/tars-docker-guide/3.TARS-PHP-HTTP%E6%9C%8D%E5%8A%A1%E7%AB%AF%E4%B8%8E%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%BC%80%E5%8F%91/)

    如果使用tars协议，请参考[TARS-PHP-TCP服务端与客户端开发](https://tangramor.gitlab.io/tars-docker-guide/2.TARS-PHP-TCP%E6%9C%8D%E5%8A%A1%E7%AB%AF%E4%B8%8E%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%BC%80%E5%8F%91/)
9. 在Tars-PHP开发环境下打包项目(在src目录下执行`php artisan tars:deploy`)
10. 在Tars管理后台发布项目，请参考[TARS-PHP-TCP服务端与客户端开发](https://tangramor.gitlab.io/tars-docker-guide/2.TARS-PHP-TCP%E6%9C%8D%E5%8A%A1%E7%AB%AF%E4%B8%8E%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%BC%80%E5%8F%91/))，测试`curl 'http://{ip}:{port}/{api_route}'`

### 使用示例

[](#使用示例)

Laravel请参考

Lumen请参考

### 集成部署

[](#集成部署)

Jenkins Pipeline 配置示例(根据实际情况修改)

Laravel:

```
pipeline {
    agent {
        node {
            label 'phpenv'
        }
    }
    parameters {
        string(defaultValue: 'upload_from_jenkins', name: 'TAG_DESC', description: '发布版本描述' )
        string(defaultValue: 'master', name: 'BRANCH_NAME', description: 'git分支，如：develop,master  默认: master')
    }
    environment {
        def JENKINS_HOME = "/root/jenkins"
        def PROJECT_ROOT = "$JENKINS_HOME/workspace/laravel-tars-demo"
        def APP_NAME = "PHPTest"
        def SERVER_NAME = "LaravelTars"
    }
    stages {
        stage('代码拉取与编译'){
            steps {
                echo "checkout from git"
                git credentialsId:'2', url: 'https://gitee.com/lb002/laravel-tars-demo', branch: "${env.BRANCH_NAME}"
                script {
                    dir("$PROJECT_ROOT/src") {
                        echo "Composer Install"
                        sh "composer clear-cache"
                        sh "composer install -vvv"
                        sh "cp .env.example .env"
                        sh "php artisan config:clear"
                        sh "php artisan config:cache"
                    }
                }
            }
        }
        stage('单元测试') {
            steps {
                script {
                    dir("$PROJECT_ROOT/src") {
                        echo "phpunit 测试"
                        sh "vendor/bin/phpunit tests/"
                        echo "valgrind 测试"
                    }
                }
            }
        }
        stage('覆盖率测试') {
            steps {
                echo "LCOV 覆盖率测试"
            }
        }
        stage('打包与发布') {
            steps {
                script {
                    dir("$PROJECT_ROOT/src") {
                        echo "打包"
                        sh "php artisan tars:deploy"
                        echo "发布"
                        sh "ls *.tar.gz > tmp.log"
                        echo "上传build包"
                        def packageDeploy = sh(script: "head -n 1 tmp.log", returnStdout: true).trim()
                        sh "curl -H 'Host:172.18.0.3:3000' -F 'suse=@./${packageDeploy}' -F 'application=${APP_NAME}' -F 'module_name=${SERVER_NAME}' -F 'comment=${env.TAG_DESC}' http://172.18.0.3:3000/pages/server/api/upload_patch_package > curl.log"
                        echo "发布build包"
                        def packageVer = sh(script: "jq '.data.id' curl.log", returnStdout: true).trim()
                        def postJson = '{"serial":true,"items":[{"server_id":"34","command":"patch_tars","parameters":{"patch_id":' + packageVer + ',"bak_flag":false,"update_text":"${env.TAG_DESC}"}}]}'
                        echo postJson
                        sh "curl -H 'Host:172.18.0.3:3000' -H 'Content-Type:application/json' -X POST --data '${postJson}' http://172.18.0.3:3000/pages/server/api/add_task"
                    }
                }
            }
        }
    }
    post {
        success {
            emailext (
                subject: "[jenkins]构建通知：${env.JOB_NAME} 分支: ${env.BRANCH_NAME} - Build# ${env.BUILD_NUMBER} 成功  !",
                body: '${SCRIPT, template="groovy-html.template"}',
                mimeType: 'text/html',
                to: "luoxiaojun1992@sina.cn",
            )
            cleanWs()
        }
        failure {
            emailext (
                subject: "[jenkins]构建通知：${env.JOB_NAME} 分支: ${env.BRANCH_NAME} - Build# ${env.BUILD_NUMBER} 失败 !",
                body: '${SCRIPT, template="groovy-html.template"}',
                mimeType: 'text/html',
                to: "luoxiaojun1992@sina.cn",
            )
            cleanWs()
        }
    }
}

```

Lumen:

```
pipeline {
    agent {
        node {
            label 'phpenv'
        }
    }
    parameters {
        string(defaultValue: 'upload_from_jenkins', name: 'TAG_DESC', description: '发布版本描述' )
        string(defaultValue: 'master', name: 'BRANCH_NAME', description: 'git分支，如：develop,master  默认: master')
    }
    environment {
        def JENKINS_HOME = "/root/jenkins"
        def PROJECT_ROOT = "$JENKINS_HOME/workspace/lumen-tars-demo"
        def APP_NAME = "PHPTest"
        def SERVER_NAME = "LumenTars"
    }
    stages {
        stage('代码拉取与编译'){
            steps {
                echo "checkout from git"
                git credentialsId:'2', url: 'https://gitee.com/lb002/lumen-tars-demo', branch: "${env.BRANCH_NAME}"
                script {
                    dir("$PROJECT_ROOT/src") {
                        echo "Composer Install"
                        sh "composer clear-cache"
                        sh "composer install -vvv"
                        sh "cp .env.example .env"
                    }
                }
            }
        }
        stage('单元测试') {
            steps {
                script {
                    dir("$PROJECT_ROOT/src") {
                        echo "phpunit 测试"
                        sh "vendor/bin/phpunit tests/"
                        echo "valgrind 测试"
                    }
                }
            }
        }
        stage('覆盖率测试') {
            steps {
                echo "LCOV 覆盖率测试"
            }
        }
        stage('打包与发布') {
            steps {
                script {
                    dir("$PROJECT_ROOT/src") {
                        echo "打包"
                        sh "php artisan tars:deploy"
                        echo "发布"
                        sh "ls *.tar.gz > tmp.log"
                        echo "上传build包"
                        def packageDeploy = sh(script: "head -n 1 tmp.log", returnStdout: true).trim()
                        sh "curl -H 'Host:172.18.0.3:3000' -F 'suse=@./${packageDeploy}' -F 'application=${APP_NAME}' -F 'module_name=${SERVER_NAME}' -F 'comment=${env.TAG_DESC}' http://172.18.0.3:3000/pages/server/api/upload_patch_package > curl.log"
                        echo "发布build包"
                        def packageVer = sh(script: "jq '.data.id' curl.log", returnStdout: true).trim()
                        def postJson = '{"serial":true,"items":[{"server_id":"33","command":"patch_tars","parameters":{"patch_id":' + packageVer + ',"bak_flag":false,"update_text":"${env.TAG_DESC}"}}]}'
                        echo postJson
                        sh "curl -H 'Host:172.18.0.3:3000' -H 'Content-Type:application/json' -X POST --data '${postJson}' http://172.18.0.3:3000/pages/server/api/add_task"
                    }
                }
            }
        }
    }
    post {
        success {
            emailext (
                subject: "[jenkins]构建通知：${env.JOB_NAME} 分支: ${env.BRANCH_NAME} - Build# ${env.BUILD_NUMBER} 成功  !",
                body: '${SCRIPT, template="groovy-html.template"}',
                mimeType: 'text/html',
                to: "luoxiaojun1992@sina.cn",
            )
            cleanWs()
        }
        failure {
            emailext (
                subject: "[jenkins]构建通知：${env.JOB_NAME} 分支: ${env.BRANCH_NAME} - Build# ${env.BUILD_NUMBER} 失败 !",
                body: '${SCRIPT, template="groovy-html.template"}',
                mimeType: 'text/html',
                to: "luoxiaojun1992@sina.cn",
            )
            cleanWs()
        }
    }
}

```

Jenkins部署过程 [![Jenkins Pipeline](./docs/jenkins-pipeline.png)](./docs/jenkins-pipeline.png)

### PHP框架集成Tars

[](#php框架集成tars)

[TARS如何集成到PHP框架](./docs/integration.md)

###  Health Score

32

—

LowBetter than 72% of packages

Maintenance19

Infrequent updates — may be unmaintained

Popularity27

Limited adoption so far

Community12

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~66 days

Recently: every ~44 days

Total

15

Last Release

1759d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/3a9a7ab17addb5818306fe7052bf2fa4c5028284ab1e6c91c26894cf645cbf5f?d=identicon)[luoxiaojun1992](/maintainers/luoxiaojun1992)

---

Top Contributors

[![luoxiaojun1992](https://avatars.githubusercontent.com/u/6905700?v=4)](https://github.com/luoxiaojun1992 "luoxiaojun1992 (28 commits)")

---

Tags

laravelphptarstarsphp

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/luoxiaojun1992-laravel-tars/health.svg)

```
[![Health](https://phpackages.com/badges/luoxiaojun1992-laravel-tars/health.svg)](https://phpackages.com/packages/luoxiaojun1992-laravel-tars)
```

###  Alternatives

[roots/acorn

Framework for Roots WordPress projects built with Laravel components.

9682.1M97](/packages/roots-acorn)[laravel-zero/framework

The Laravel Zero Framework.

3371.4M369](/packages/laravel-zero-framework)[spatie/laravel-health

Monitor the health of a Laravel application

85810.0M83](/packages/spatie-laravel-health)[andreaselia/laravel-api-to-postman

Generate a Postman collection automatically from your Laravel API

1.0k586.2k3](/packages/andreaselia-laravel-api-to-postman)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)[mll-lab/laravel-graphiql

Easily integrate GraphiQL into your Laravel project

683.2M9](/packages/mll-lab-laravel-graphiql)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
