Установка базовых компонентов 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-фреймворк, имеют название, состоящее из трех частей:
Примечание:
Один Server может содержать несколько Servant. Система использует комбинацию App + Server + Servant для определения маршрутизации сервиса в системе, называемого маршрутизационным объектом (routing Obj), который должен быть уникальным по всей системе, чтобы обеспечить уникальное идентификацию сервиса при предоставлении услуг.
Поэтому при определении APP следует учитывать уникальность APP.Например: TestApp.HelloServer.HelloObj.
После успешного входа в систему управления Tars пользователь попадает в систему управления Tars, как показано на следующем рисунке:
В меню системы управления Tars есть следующие функции:
Развертывание сервиса можно выполнить после разработки сервиса, но рекомендуется выполнить это заранее.
Как показано на следующем рисунке:
Нажмите "Подтвердить", после успешного выполнения, приложение TestApp в меню будет отображать имя HelloServer, а также на правой стороне появится информация о добавленном сервисе, как показано на следующем рисунке:
Запустите скрипт 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
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.
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
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 )