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

OSCHINA-MIRROR/zuoqi200-TarsGo

Клонировать/Скачать
tars_go_quickstart.md 15 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 08.06.2025 21:13 bbeb55c

Быстрый старт Tars Go

Подготовка окружения

Установка базовых компонентов Tars см. в разделе установки.

Подготовка окружения Golang, TarsGo требует версию Golang 1.9 или выше.

Установка Tars: go get github.com/TarsCloud/TarsGo/tars

Компиляция инструмента преобразования протоколов Tars в Golang:

cd $GOPATH/src/github.com/TarsCloud/TarsGo/tars/tools/tars2go && go build .

cp tars2go $GOPATH/bin

Проверьте установку Tars в GOPATH.

Название сервиса

Сервисы, использующие Tars-фреймворк, имеют название, состоящее из трех частей:

  • APP: имя приложения, которое обозначает небольшую группу сервисов. В системе Tars имя приложения должно быть уникальным. Например: TestApp;
  • Server: имя сервиса, имя процесса, предоставляющего сервис. Имя сервера должно отражать функциональность бизнес-сервиса и обычно имеет формат XXServer, например HelloServer;
  • Servant: сервис, предоставляющий конкретный интерфейс или экземпляр сервиса. Например: HelloImp;

Примечание:

Один Server может содержать несколько Servant. Система использует комбинацию App + Server + Servant для определения маршрутизации сервиса в системе, называемого маршрутизационным объектом (routing Obj), который должен быть уникальным по всей системе, чтобы обеспечить уникальное идентификацию сервиса при предоставлении услуг.

Поэтому при определении APP следует учитывать уникальность APP.Например: TestApp.HelloServer.HelloObj.

Система управления Tars

После успешного входа в систему управления Tars пользователь попадает в систему управления Tars, как показано на следующем рисунке:

tars_manager_main

В меню системы управления Tars есть следующие функции:

  • Управление бизнесом: включает уже развернутые сервисы, а также управление сервисами, управление выпусками, конфигурацию сервисов, мониторинг сервисов, мониторинг функций и т. д.;
  • Управление эксплуатацией: включает развертывание сервисов, масштабирование, управление шаблонами и т. д.;

Развертывание сервиса

Развертывание сервиса можно выполнить после разработки сервиса, но рекомендуется выполнить это заранее.

Как показано на следующем рисунке:new_project

  • Приложение: в каком приложении зарегистрирован сервис, например: TestApp.
  • Имя сервиса: уникальное имя сервиса, например: HelloGo.
  • Тип сервиса: язык, на котором написан сервис, например: выбор tars_go для Go.
  • Шаблон: имя конфигурационного файла, используемого при запуске сервиса, по умолчанию tars.default.
  • Узел: IP-адрес машины, на которой развернут сервис.
  • Группа Set: информация о группе Set сервиса, которая включает три части: имя Set, регион Set и имя группы Set.
  • Имя OBJ: имя Servant.
  • IP-адрес OBJ: IP-адрес машины, на которой привязан сервис, обычно совпадает с узлом.
  • Порт: порт, на который привязывается OBJ.
  • Тип порта: использование TCP или UDP.
  • Протокол: используемый протокол связи на уровне приложения, по умолчанию Tars использует протокол tars.
  • Количество потоков: количество потоков для обработки бизнес-логики.
  • Максимальное количество подключений: максимальное количество подключений, которое поддерживается.
  • Максимальная длина очереди: размер очереди для приема запросов.
  • Время ожидания очереди: время ожидания для очереди приема запросов.

Нажмите "Подтвердить", после успешного выполнения, приложение TestApp в меню будет отображать имя HelloServer, а также на правой стороне появится информация о добавленном сервисе, как показано на следующем рисунке:service_inactive

Разработка сервиса

Создание сервиса

Запустите скрипт create_tars_server.sh для автоматического создания необходимых файлов для сервиса. В процессе выполнения, если возникнут синтаксические ошибки, попробуйте выполнить команду dos2unix create_tars_server.sh для кодирования.

sh $GOPATH/src/github.com/TarsCloud/TarsGo/tars/tools/create_tars_server.sh [App] [Server] [Servant]
Пример:
sh $GOPATH/src/github.com/TarsCloud/TarsGo/tars/tools/create_tars_server.sh TestApp HelloGo SayHello

После выполнения команды, код будет сгенерирован в GOPATH и размещён в директории с названием APP/Server. В сгенерированном коде также указаны конкретные пути.

[root@1-1-1-1 ~]# sh $GOPATH/src/github.com/TarsCloud/TarsGo/tars/tools/create_tars_server.sh TestApp HelloGo SayHello
[create server: TestApp.HelloGo ...]
[mkdir: $GOPATH/src/TestApp/HelloGo/]
>>>Now doing:./start.sh >>>>
>>>Now doing:./Server.go >>>>
>>>Now doing:./Server.conf >>>>
>>>Now doing:./ServantImp.go >>>>
>>>Now doing:./makefile >>>>
>>>Now doing:./Servant.tars >>>>
>>>Now doing:client/client.go >>>>
>>>Now doing:vendor/vendor.json >>>>
# runtime/internal/sys
>>> Great!Done! You can jump in $GOPATH/src/TestApp/HelloGo
>>> После завершения редактирования Tars файла, используйте следующую команду для автоматического создания go файла
>>>       $GOPATH/bin/tars2go *.tars

Определение файлов интерфейса

Файлы интерфейса определяют методы запросов и типы полей параметров. Подробное описание файлов определения интерфейса можно найти в tars_tup.md.

Для тестирования определим интерфейс echoHello, где параметр запроса клиента — это короткая строка, например "tars", а ответ сервера — "hello tars".```shell

cat $GOPATH/src/TestApp/HelloGo/SayHello.tars

module TestApp{ interface SayHello{ int echoHello(string name, out string greeting); }; };


**Внимание**: Параметр с ключевым словом **out** обозначает выходной параметр.

### Разработка сервера

Сначала преобразуем файл протокола Tars в формат языка Go.

```shell
$GOPATH/bin/tars2go SayHello.tars

Теперь реализуем логику сервера: сервер отвечает "привет name" на имя, полученное от клиента.

cat $GOPATH/src/TestApp/HelloGo/SayHelloImp.go
package main

type SayHelloImp struct {
}
func (imp *SayHelloImp) EchoHello(name string, greeting *string) (int32, error) {
     *greeting = "привет " + name
     return 0, nil
}

Внимание: здесь имя функции должно быть заглавным, таковы правила экспорта методов в Go.

Компиляция основного метода main, исходного кода и реализация с использованием фреймворка Tars.

cat  $GOPATH/src/TestApp/HelloGo/HelloGo.go
package main

import (
	"github.com/TarsCloud/TarsGo/tars"

	"TestApp"
)

func main() { //Инициализация служб
	imp := new(SayHelloImp)                                    //Создание Imp
	app := new(TestApp.SayHello)                                 //Создание и инициализация A JCE
	cfg := tars.GetServerConfig()                               //Получение объекта конфигурационного файла
	app.AddServant(imp, cfg.App+"."+cfg.Server+".SayHelloObj") //Регистрация служб
	tars.Run()
}

Компиляция и создание исполняемого файла, а также создание пакета для публикации.

cd $GOPATH/src/TestApp/HelloGo/ && make && make tar

Создание исполняемого файла HelloGo и пакета для публикации HelloGo.tgz.

Разработка клиента```go

package main

import ( "fmt" "github.com/TarsCloud/TarsGo/tars"

    "TestApp"

)

// Инициализация только один раз, глобальная var comm *tars.Communicator

func main() { comm = tars.NewCommunicator() obj := "TestApp.HelloGo.SayHelloObj@tcp -h 127.0.0.1 -p 3002 -t 60000" app := new(TestApp.SayHello) /* // Если ваша служба была зарегистрирована в Tars registry comm = tars.NewCommunicator() obj := "TestApp.HelloGo.SayHelloObj" // tarsregistry служба на 192.168.1.1:17890 comm.SetProperty("locator", "tars.tarsregistry.QueryObj@tcp -h 192.168.1.1 -p 17890") */

    comm.StringToProxy(obj, app)
    reqStr := "tars"
    var resp string
    ret, err := app.EchoHello(reqStr, &resp)
    if err != nil {
            fmt.Println(err)
            return
    }
    fmt.Println("ret: ", ret, "resp: ", resp)

}


- Зависимость TestApp является кодом, сгенерированным tars2go.

- Объект obj указывает адрес и порт сервера. Если сервер не зарегистрирован в главном контроллере, необходимо знать адрес и порт сервера и указать их в Obj. В примере протокол TCP, адрес сервера локальный, порт 3002. Если есть несколько серверов, можно указать их так: `TestApp.HelloGo.SayHelloObj@tcp -h 127.0.0.1 -p 9985:tcp -h 192.168.1.1 -p 9983`, таким образом запросы могут быть распределены по нескольким узлам. Если сервис уже зарегистрирован в управлении, то не требуется указывать статические адрес и порт сервера, но при инициализации коммутирующего устройства необходимо указать адрес управления.

- Коммутирующее устройство comm используется для связи с сервером.Компиляция и тестирование

```shell
# go build client.go
# ./client
ret:  0 resp:  hello tars 

Развитие HTTP-сервиса

tarsgo поддерживает HTTP-сервисы. Следуя вышеописанным шагам, создайте сервис, и обработка HTTP-запросов в tarsgo представляет собой обертку над стандартными средствами Go, поэтому использование её очень простое.

package main

import (
	"net/http"
	"github.com/TarsCloud/TarsGo/tars"
)

func main() {
	mux := &tars.TarsHttpMux{}
	mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("Hello tars"))
	})
	cfg := tars.GetServerConfig()
	tars.AddHttpServant(mux, cfg.App+"."+cfg.Server+".HttpSayHelloObj") //Регистрация HTTP-сервера
	tars.Run()
}

Кроме того, можно также напрямую вызывать другие tars-сервисы, используя методы, описанные в разделе "Разработка клиента".

Публикация сервиса

В меню управления системой, найдите развернутый вами сервис и перейдите на страницу сервиса.

Выберите "Управление публикациями", отметьте узлы для публикации, нажмите "Публикуйте выбранные узлы", затем "Загрузить пакет публикации", выберите уже скомпилированный пакет публикации, как показано на следующем рисунке:

релиз

После загрузки пакета публикации, в выпадающем списке "Выберите версию публикации" появится ваша загруженная программа. Выберите верхнюю строку (самую новую загруженную).

Нажмите "Публикация", сервис начнет публикацию. После успешной публикации, появится следующий интерфейс, как показано на следующем рисунке:сервис_ок

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/zuoqi200-TarsGo.git
git@api.gitlife.ru:oschina-mirror/zuoqi200-TarsGo.git
oschina-mirror
zuoqi200-TarsGo
zuoqi200-TarsGo
master