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

OSCHINA-MIRROR/TarsCloud-TarsJava

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 17 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 01:33 3d93fa8

Tars Java — RPC-библиотека и фреймворк

Этот проект представляет собой исходный код Tars RPC фреймворка на языке Java.

Домашняя страница: tarscloud.org
Китайская версия: нажмите здесь, чтобы просмотреть китайскую версию

Зависимость от среды

  • JDK 1.8 или выше;
  • Maven 3.5 или выше.

Развёртывание TarsFramework с помощью Docker

В этом руководстве используется Docker для полного развёртывания Tars. [Macos, Linux]

Запуск TarsFramework в Docker

docker pull tarscloud/framework:latest
docker pull tarscloud/tars-node:latest
docker pull mysql:5.6
docker network create -d bridge --subnet=172.25.0.0/16 --gateway=172.25.0.1 tars
docker run -d \
--net=tars \
-e MYSQL_ROOT_PASSWORD="root@appinside" \
--ip="172.25.0.2" \
--name=tars-mysql \
mysql:5.6
sleep 30s
docker run -d \
--net=tars \
-e MYSQL_HOST=172.25.0.2 \
-e MYSQL_ROOT_PASSWORD='root@appinside' \
-eREBUILD=false  -eSLAVE=false \
-e INET=eth0 \
--ip="172.25.0.4" \
-p 3000-3001:3000-3001 \
tarscloud/framework
sleep 60s
docker run -d --net=tars --ip="172.25.0.3"  -eWEB_HOST=http://172.25.0.4:3000        tarscloud/tars-node

Примечание: параметр -p 18600–18700:18600–18700 открывает порт 18600–18700 для приложения. При необходимости можно добавить больше портов.

Быстрый старт с TarsServer (Provider)

Это руководство даёт вам краткое введение в Tars на Java через простой сервер пример сервера.

Структура проекта

├── pom.xml
└── src
   └── main
       ├── java
       │   └── tars
       │       └── testapp
       │          ├── HelloServant.java
       │          ├── QuickStartApplication.java
       │          └── impl
       │                └── HelloServantImpl.java
       └── resources
           └── hello.tars

Конфигурация зависимостей

Следующая конфигурация должна быть добавлена в pom.xml:

Spring boot и зависимость от Tars framework


<properties>
    <spring-boot.version>2.3.5.RELEASE</spring-boot.version>
</properties>

<dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>${spring-boot.version}</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
    <groupId>com.tencent.tars</groupId>
    <artifactId>tars-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>
</dependencies>

Зависимость плагина

<!--tars2java plugin-->
<plugin>
    <groupId>com.tencent.tars</groupId>
    <artifactId>tars-maven-plugin</artifactId>
    <version>2.0.0</version>
    <configuration>
        <tars2JavaConfig>
            <!-- tars file location -->
            <tarsFiles>
                <tarsFile>${basedir}/src/main/resources/hello.tars</tarsFile>
            </tarsFiles>
            <!-- Source file encoding -->
            <tarsFileCharset>UTF-8</tarsFileCharset>
            <!-- Generate server code -->
            <servant>true</servant>
            <!-- Generated source code encoding -->
            <charset>UTF-8</charset>
            <!-- Generated source code directory -->
            <srcPath>${basedir}/src/main/java</srcPath>
            <!-- Generated source code package prefix -->
            <packagePrefixName>com.qq.tars.quickstart.server.</packagePrefixName>
        </tars2JavaConfig>
    </configuration>
</plugin>
        <!--package plugin-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
    <archive>
        <manifestEntries>
            <Class-Path>conf/</Class-Path>
        </manifestEntries>
    </archive>
</configuration>
</plugin>
<plugin> **Создание и тестирование программного обеспечения с использованием Tars**

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

* **Определение файла интерфейса Tars:**
    * Tars имеет собственный формат файлов интерфейса. Сначала необходимо определить файл интерфейса Tars. Создайте новый файл *hello.tars* в каталоге *resources* со следующим содержимым:

        ```text
        module TestApp
        {
            interface Hello
            {
                string hello(int no, string name);
            };
        };
        ```

* **Компиляция файла интерфейса:**
    * Затем необходимо преобразовать файл интерфейса Tars в код интерфейса сервера с помощью плагина *tars-maven-plugin*. В корневом каталоге проекта выполните команду *mvn tars: tars2java*, чтобы получить файл *HelloServant.java* со следующим содержанием:

        ```java
        @Servant
        public interface HelloServant {

            public String hello(int no, String name);
        }
        ```

* **Реализация интерфейса:**
    * Далее необходимо реализовать сгенерированный интерфейс сервера. Создайте новый файл *HelloServantImpl.java*, реализуйте интерфейс *HelloServant.java* и предоставьте сервис через аннотацию *@TarsServant*, где «HelloObj» — это имя слуги, соответствующее имени на платформе веб-управления.

        ```java
        @TarsServant("HelloObj")
        public class HelloServantImpl implements HelloServant {

            @Override
            public String hello(int no, String name) {
                return String.format("hello no=%s, name=%s, time=%s", no, name, System.currentTimeMillis());
            }
        }
        ```

* **Включение службы Tars:**
    * Наконец, добавьте аннотацию *@EnableTarsServer* в класс запуска spring boot *QuickStartApplication*, чтобы включить службу Tars:

        ```java
        @SpringBootApplication
        @EnableTarsServer
        public class QuickStartApplication {
            public static void main(String[] args) {
                SpringApplication.run(QuickStartApplication.class, args);
            }
        }
        ```

Используя плагин *spring-boot-maven*, выполните команду *mvn package* в корневом каталоге, чтобы упаковать его в jar-файл.

**Клиент (потребитель) разработка**

Это руководство даёт вам краткое введение в Tars на Java на примере простого клиента [пример клиента](./examples/tars-spring-boot-server).

**Структура проекта:**

```text
├── pom.xml
└── src
   └── main
       ├── java
       │   └── tars
       │       └── testapp
       │          ├── HelloPrx.java
       │          ├── HelloPrxCallback.java
       │          ├── App.java
       │          └── impl
       │                └── ClientServantImpl.java
       └── resources
           ├── hello.tars
           └── client.tars

Конфигурация зависимостей:

В pom.xml необходимо добавить следующую конфигурацию:

  • Зависимость Spring boot и Tars framework:

    <properties>
        <spring-boot.version>2.0.3.RELEASE</spring-boot.version>
    </properties>
    
    <dependencyManagement>
org.springframework.boot spring-boot-dependencies ${spring-boot.version} pom import com.tencent.tars tars-spring-boot-starter 2.0.0 ```
  • Плагин зависимости:

    
    
com.tencent.tars tars-maven-plugin 2.0.0 ${basedir}/src/main/resources/hello.tars UTF-8 false UTF-8 ``` **Разработка сервиса**

Компиляция файла интерфейса сервера

После завершения разработки серверного сервиса сначала необходимо получить клиентский код интерфейса серверного сервиса. Скопируйте файл hello.tars на стороне сервера в каталог resources и выполните команду mvn tars: tars2java в корневом каталоге проекта, чтобы получить HelloPrx.java. В это время получается прокси-интерфейс серверного сервиса, и предоставляются три метода вызова: синхронный вызов, асинхронный вызов и вызов с обещанием.

@Servant
public interface HelloPrx {
    String hello(int no, String name);

    CompletableFuture<String> promise_hello(int no, String name);

    String hello(int no, String name, @TarsContext java.util.Map<String, String> ctx);

    void async_hello(@TarsCallback HelloPrxCallback callback, int no, String name);

    void async_hello(@TarsCallback HelloPrxCallback callback, int no, String name, @TarsContext java.util.Map<String, String> ctx);
}

Вызов с обещанием — это новая функция Tars v2.0.0. Для конкретного использования обратитесь к справочнику по файлам Tars.

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

Затем определите файл интерфейса клиента. Создайте новый файл client.tars в каталоге resources со следующим содержимым:

module TestApp {
    interface Client {
        string rpcHello(int no, string name);
    };
};

Компиляция файла интерфейса клиента

Далее нам нужно использовать плагин tars-maven-plugin для генерации кода интерфейса клиентского сервиса. Измените зависимость плагина tars2java в pom.xml следующим образом. Обратите внимание, что установлено значение <servant> </ servant> true.

<!--tars2java plugin-->
<plugin>
    <groupId>com.tencent.tars</groupId>
    <artifactId>tars-maven-plugin</artifactId>
    <version>2.0.0</version>
    <configuration>
        <tars2JavaConfig>
            <!-- tars file location -->
            <tarsFiles>
                <tarsFile>${basedir}/src/main/resources/client.tars</tarsFile>
            </tarsFiles>
            <!-- Source file encoding -->
            <tarsFileCharset>UTF-8</tarsFileCharset>
            <!-- Generate server code -->
            <servant>true</servant>
            <!-- Generated source code encoding -->
            <charset>UTF-8</charset>
            <!-- Generated source code directory -->
            <srcPath>${basedir}/src/main/java</srcPath>
            <!-- Generated source code package prefix -->
            <packagePrefixName>com.tencent.tars.client.</packagePrefixName>
        </tars2JavaConfig>
    </configuration>
</plugin>

В корневом каталоге проекта снова выполните mvn tars: tars2java, чтобы получить ClientServant.java. Содержимое выглядит следующим образом:

@Servant
public interface ClientServant {
    public String rpcHello(int no, String name);
}

Реализация интерфейса

Нам нужно реализовать сгенерированный интерфейс клиентского сервиса. Создайте новый ClientServantImpl.java, реализуйте интерфейс HelloServant.java и предоставьте сервис через аннотацию @TarsServant, где «HelloObj» — имя слуги, соответствующее имени в веб-управлении. Платформа

Добавив аннотацию @TarsClient к свойствам клиента, можно автоматически внедрить соответствующий сервис. Если заполнено только имя объекта Obj, для внедрения клиента используется значение по умолчанию. Кроме того, в аннотации можно настроить конфигурацию клиента, например, установить время ожидания синхронного вызова.

@TarsServant("ClientObj")
public class ClientServantImpl implements ClientServant {
    @TarsClient("TestServer.HelloServer.HelloObj")
    HelloPrx helloPrx;

    String res = "";

    @Override
    public String rpcHello(int no, String name) {
        //синхронный вызов
        String syncres = helloPrx.hello(1000, "Hello World");
        res += "sync_res: " + syncres + " ";
        //асинхронный вызов
        helloPrx.async_hello(new HelloPrxCallback() {

            @Override
            public void callback_expired() {
            }

            @Override
            public void callback_exception(Throwable ex) {
            }

            @Override
            public void callback_hello(String ret) {
                res += "async_res: " + ret + " ";

            }
        }, 1000, "HelloWorld");
        //вызов с использованием промиса
        helloPrx.promise_hello(1000, "hello world").thenCompose(x -> {
            res += "promise_res: " + x;
            return CompletableFuture.completedFuture(0);
        });
        return res;
    }
}
Включение сервиса Tars

Наконец, добавьте аннотацию @EnableTarsServer в класс запуска Spring Boot App, чтобы включить сервис Tars:

@SpringBootApplication
@EnableTarsServer
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}
Упаковка сервиса

Используя spring-boot-maven-plugin, выполните команду mvn package в корневом каталоге, чтобы упаковать его в jar-файл.

Описание функций

Tars-java совместим с системой Spring Cloud, пользователи могут интегрировать Tars-java в Spring Cloud.

Каталог Функции
net Исходный код реализации сетевого фреймворка на языке Java
core Исходный код реализации rpc-фреймворка на языке Java
tools Исходный код реализации инструментов фреймворка, maven-плагинов и т. д.
examples Пример кода для фреймворка Java-языка
distributedContext Исходный код реализации распределённого контекста фреймворка языка Java
protobuf Исходный код реализации поддержки протокола pb
spring Исходный код реализации поддержки Spring-фреймворка

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

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

1
https://api.gitlife.ru/oschina-mirror/TarsCloud-TarsJava.git
git@api.gitlife.ru:oschina-mirror/TarsCloud-TarsJava.git
oschina-mirror
TarsCloud-TarsJava
TarsCloud-TarsJava
master