1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lb002-laravel-tars

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Драйвер Laravel для Tars

Описание

Драйвер Tars для Laravel.

Интеграция микросервисной архитектуры с помощью управления сервисами Tars в Laravel.

Возможности

  • Поддержка пакетирования сервисов
  • Поддержка нативного разработчика Laravel/Lumen
  • Поддержка TarsConfig
  • Поддержка TarsLog
  • Поддержка регистрации и отключения сервисов через шлюз
  • Поддержка событий начала запроса (laravel.tars.requesting) и завершения запроса (laravel.tars.requested)
  • Поддержка вывода данных через echo
  • Поддержка протоколов HTTP и TARS
  • Поддержка распределенной трассировки Zipkin (удалено, можно использовать расширение laravel-zipkin)

Ограничения

  • Из-за ограничений самого фреймворка не поддерживает корутины

Внешние зависимости

  1. Laravel/Lumen 5.x
  2. Tars-PHP

Установка

  1. Создание проекта

    Создайте структуру директорий проекта Tars (scripts, src, tars), а проект Laravel/Lumen расположите в директории src.

  2. Установка пакета Laravel Tars

    Обновите зависимости Composer

    composer require "luoxiaojun1992/laravel-tars:*"

    или добавьте требование в 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, заменив appName, serverName, objName в поле proto.

  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, пишите код в соответствии с требованиями Laravel.

     $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.php, добавьте tarsFiles.

    Выполните скрипт компиляции в директории scripts

    /bin/bash tars2php.sh

    Создайте реализацию интерфейсов в директории src/app/Tars/impl, напишите бизнес-логику.

    Измените конфигурационный файл src/config/tars.php, заменив пространства имён интерфейсов и реализаций в поле services.

  8. Настройка среды разработки Tars-PHP

    Если используется протокол HTTP, обратитесь к TARS-PHP-HTTP сервер и клиент разработка

    Если используется протокол TARS, обратитесь к TARS-PHP-TCP сервер и клиент разработка

  9. Упаковка проекта в среде разработки Tars-PHP (выполните команду php artisan tars:deploy в директории src).

  10. Размещение проекта в административной панели Tars, обратитесь к TARS-PHP-TCP сервер и клиент разработка , тестирование curl 'http://{ip}:{port}/{api_route}'

Пример использования

Пример для Laravel доступен по адресу https://github.com/luoxiaojun1992/laravel-tars-demo

Пример для Lumen доступен по адресу https://github.com/luoxiaojun1992/lumen-tars-demo

Интеграция и развертывание

Пример конфигурации Jenkins Pipeline (по необходимости измените)Laravel:

pipeline {
    agent {
        node {
            label 'phpenv'
        }
    }
    parameters {
        string(defaultValue: 'upload_from_jenkins', name: 'TAG_DESC', description: 'Description of the release version' )
        string(defaultValue: 'master', name: 'BRANCH_NAME', description: 'Git branch, for example: develop, master Default: 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('Checkout code and build') {
            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('Unit testing') {
            steps {
                script {
                    dir("$PROJECT_ROOT/src") {
                        echo "PHPUnit Testing"
                        sh "vendor/bin/phpunit tests/"
                        echo "Valgrind Testing"
                    }
                }
            }
        }
        stage('Coverage testing') {
            steps {
                echo "LCOV Coverage Testing"
            }
        }
        stage('Packaging and Release') {
            steps {
                script {
                    dir("$PROJECT_ROOT/src") {
                        echo "Packaging"
                        sh "php artisan tars:deploy"
                        echo "Release"
                        sh "ls *.tar.gz > tmp.log"
                        echo "Upload build package"
                        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 "Release build package"
                        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]Build message: ${env.JOB_NAME} Branch: ${env.BRANCH_NAME} - Build# ${env.BUILD_NUMBER} successfully completed!",
                body: '${SCRIPT, template="groovy-html.template"}',
                mimeType: 'text/html',
                to: "luoxiaojun1992@sina.cn",
            )
            cleanWs()
        }
        failure {
            emailext (
                subject: "[jenkins]Build message: ${env.JOB_NAME} Branch: ${env.BRANCH_NAME} - Build# ${env.BUILD_NUMBER} failed!",
                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: 'Description of the release version' ) string(defaultValue: 'master', name: 'BRANCH_NAME', description: 'Git branch, for example: develop, master Default: 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('Checkout and compile code') { 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 "Install Composer" sh "composer clear-cache" sh "composer install -vvv" sh "cp .env.example .env" } } } } stage('Unit testing') { steps { script { dir("$PROJECT_ROOT/src") { echo "PHPUnit Testing" sh "vendor/bin/phpunit tests/" echo "Valgrind Testing" } } } } stage('Coverage testing') { steps { echo "LCOV Coverage Testing" } } stage('Building and Release') { steps { script { dir("$PROJECT_ROOT/src") { echo "Building" sh "php artisan tars:deploy" echo "Release" sh "ls *.tar.gz > tmp.log" echo "Upload 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 "Release 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]Build notification: ${env.JOB_NAME} Branch: ${env.BRANCH_NAME} - Build# ${env.BUILD_NUMBER} Successfully!", body: '${SCRIPT, template="groovy-html.template"}', mimeType: 'text/html', to: "luoxiaojun1992@sina.cn", ) cleanWs() } failure { emailext ( subject: "[jenkins]Build notification: ${env.JOB_NAME} Branch: ${env.BRANCH_NAME} - Build# ${env.BUILD_NUMBER} Failed!", body: '${SCRIPT, template="groovy-html.template"}', mimeType: 'text/html', to: "luoxiaojun1992@sina.cn", ) cleanWs() } } }




Deployment process in Jenkins
![Jenkins Pipeline](./docs/jenkins-pipeline.png)

### Integration of Tars into PHP Framework
[Integrating TARS into a PHP framework](./docs/integration.md)

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Laravel интеграция с микросервисной управленческой структурой Tars. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/lb002-laravel-tars.git
git@api.gitlife.ru:oschina-mirror/lb002-laravel-tars.git
oschina-mirror
lb002-laravel-tars
lb002-laravel-tars
master