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

OSCHINA-MIRROR/Tencent-TSeer

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
seer-api-java-quickstart.md 18 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 21:21 63381a2

Оглавление

  • 概述
  • Разработка среды
  • API интерфейс
  • Использование API

Обзор

Для распределённой системы обнаружения имён предоставляется Java-клиент в виде jar-пакета. Он предоставляет функции для запроса информации об узлах службы, отправки данных и другие возможности. В этой статье кратко описывается API интерфейса, а также объясняется, как использовать этот API, чтобы пользователи могли быстро начать работу.

Разработка среды

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

  • JDK 1.7 или более поздняя версия
  • Maven 2.2.1 или более поздняя версия.

Информацию о том, как установить JDK и Maven, можно найти самостоятельно. Здесь она не приводится.

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

С помощью IDE или командной строки создайте проект Maven. Здесь в качестве примера используется Eclipse: File -> New -> Project -> Maven Project -> maven-archetype-webapp (или archetype-quickstart, в зависимости от ваших потребностей). Это создаст проект Maven.

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

Добавьте зависимость Tseer в файл pom.xml только что созданного проекта.

<dependency>
    <groupId>qq-cloud-central</groupId>
    <artifactId>Tseer-client</artifactId>
    <version>1.0.1</version>
</dependency>

API интерфейс

1. Запрос ключа API

Сначала необходимо запросить ключ API для своего бизнеса на странице управления. Этот ключ будет использоваться в качестве параметра при инициализации API. Вот как это делается:

RouterConfig.setSeerApiKey("your server's API key");  // Замените на реальный ключ API вашего сервера

2. Описание интерфейса

Номер Название интерфейса или класса Описание функции
1 RouterFactory Класс фабрики для создания экземпляров интерфейса маршрутизации. Реализует одноэлементный паттерн, позволяя создавать экземпляры интерфейса маршрутизации двумя способами: через Agent или чистый API.
2 RouterConfig Класс конфигурации для маршрутизации имён.
3 Router Интерфейс маршрутизации, предоставляемый внешним пользователям для поиска узлов служб, отправки данных мониторинга и других функций.

3. Описание методов интерфейса

3.1 Инициализация интерфейса маршрутизации

Метод Параметры Возвращаемое значение Класс
Router createAgentRouter() Без параметров Экземпляр Router в режиме Agent RouterFactory
Router createApiRouter() Без параметров Экземпляр Router в чистом API режиме RouterFactory

3.2 Получение отдельного узла службы

Обзор Получение информации о конкретном узле службы в соответствии с указанным способом
Метод Result getRouter(RouterRequest request);
Параметры Запрос: входные данные, содержащие информацию о запросе службы, включая имя службы, способ получения, метод балансировки нагрузки и т. д.
Возвращаемое значение Включает код возврата и информацию о маршруте (RouterResponse). Код возврата равен 0 для успеха, -1 для неудачи, и в случае неудачи будет содержать сообщение об ошибке.
Примечание Структура классов RouterRequest и RouterResponse приведена ниже.

RouterRequest:

public class RouterRequest {

    private String obj; // Имя службы для запроса, обязательно
    private LBGetType lbGetType; // Способ получения: IDC, set или all (по умолчанию ALL), опционально
    private String setInfo; // Информация о set, обязательна при получении через set
    private LBType lbType; // Тип балансировки нагрузки, по умолчанию циклический, опционально
    private long hashKey; // Ключ хеширования, обязателен при использовании хеш-балансировки
    private String callModuleName; // Имя основного модуля вызова, требуется для отправки данных мониторинга, если пусто, заменяется локальным IP, необязательно (рекомендуется заполнить)
    .... Опущены методы getter и setter
}

LBGetType:

public enum LBGetType {
    LB_GET_IDC(0), // По IDC
    LB_GET_SET(1), // По set
    LB_GET_ALL(2); // Все узлы
}

LBType:

public enum LBType {
    LB_TYPE_LOOP(0), // Циклический
    LB_TYPE_RANDOM(1), // Случайный
    LB_TYPE_STATIC_WEIGHT(2), // Статический вес
    LB_TYPE_CST_HASH(3), // Хеш-балансировка
    LB_TYPE_ALL(4);  // Все узлы, не устанавливайте этот тип при вызове метода getRouter, иначе по умолчанию будет возвращён первый узел в списке
}

RouterResponse:

public class RouterResponse {
    
    private ServerNode serverNode; // Узел службы
    private String responseMsg;   // Ответное сообщение
    ...
}

ServerNode:

public class ServerNode {
    private String sIP;    // IP службы
    private int port;    // Порт службы
    private int timeout; // Время ожидания доступа к узлу
    private boolean bTcp;  // Является ли это TCP-соединением
    ...
}

3.3 Получение списка узлов службы

Обзор Получение всех узлов службы в соответствии с заданным способом
Метод Result getRouters(RoutersRequest request);
Параметры Запрос: входные данные, необходимые для получения информации о службе, включая имя службы и способ получения.
Возвращаемое значение Включает код возврата и информацию о маршрутах (RoutersResponse). Код возврата равен 0 для успеха, -1 для неудачи, и в случае неудачи будет содержать сообщение об ошибке
Примечание Классы RoutersRequest и RoutersResponse приведены ниже.

RoutersRequest:

public class RoutersRequest {
    
    private String obj;
    private LBGetType lbGetType;
    private String setInfo;
    ...
}

RoutersResponse:

public class RoutersResponse {
    
    private String responseMsg;
    private List<ServerNode> node;    // Список узлов
    ...
}

3.4 Отправка данных мониторинга

Обзор Отправка результатов вызовов служб (успех, тайм-аут, исключение, время выполнения) после завершения бизнес-запроса. Рекомендуется вызывать этот метод после каждого успешного бизнес-вызова, чтобы отправлять реальные результаты вызовов служб. Это помогает SeerAgent и чистому API обнаруживать неисправные узлы служб, а также отправлять данные на платформу мониторинга
Метод Result resultReport(RouterRequest req, RouterResponse res, int ret, long timecost);
Параметры req: входные параметры метода getRouter. res: результат метода getRouter. ret: код возврата метода getRouter. timecost: время вызова службы (мс)
Возвращаемое значение Возврат значения включает в себя возврат кода и возврат информации, поясняющей сообщение. Возврат кода 0 означает успех, -1 — неудачу.

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

1. Получение одного сервисного узла и отправка данных с помощью модели

        Router router = RouterFactory.getInstance().createAgentRouter();  // Инициализация маршрута, использование режима агента. Если вы хотите использовать чистый API-способ, используйте метод инициализации в следующем комментарии.
        // Router router = RouterFactory.getInstance().createApiRouter();

        RouterRequest request  = new RouterRequest();   // Создание запроса на поиск одного узла.
        request.setObj("tencent.tencentServer.HelloService");  // Установка имени запрашиваемого сервиса, которое необходимо зарегистрировать заранее на платформе управления. Используйте фактическое имя сервиса. Обязательно.
        request.setLbGetType(LBGetType.LB_GET_SET);     // Установка способа получения узла, который можно выбрать по группам, IDC или получить все. По умолчанию используется ALL, опционально.
        request.setSetInfo("sz.a.b");                   // Информация о наборе, которая должна быть заполнена при выборе группы по набору.
        request.setLbType(LBType.LB_TYPE_CST_HASH);     // Выбор алгоритма балансировки нагрузки для узлов, доступных в настоящее время: циклический перебор, статический вес, случайный и согласованный хэш. По умолчанию используется циклический перебор. Опционально.
        request.setHashKey((long)10086);                // Ключ хэша, который должен быть заполнен при использовании метода согласованного хэша.
        request.setCallModuleName("seerClientDemo");    // Имя основного модуля вызова, которое должно быть изменено при отправке данных моделирования. Выберите или оставьте пустым, используя локальный IP-адрес для заполнения. Заполните в соответствии с фактическим значением.

        Result<RouterResponse> result = router.getRouter(request);  // Вызов интерфейса получения узла маршрута, передача запроса в качестве параметра.
        int ret_code = result.getRet();                 // Возвращаемый код результата.
        if (ret_code == 0) {                            // Если код результата равен 0, вызов успешен.
            String IP = result.getData().getIP();       // Получение IP-адреса возвращаемого узла.
            int port = result.getData().getPort();      // Получение порта возвращаемого узла.
            boolean istcp = result.getData().isbTcp();  // Получение информации о том, использует ли возвращаемый узел TCP-связь. True означает использование TCP, false означает использование UDP.

            System.out.println("get HelloService node: IP " + IP + " port " + port +
                    " protol " + (istcp ? " tcp": " udp"));

            // Имитация вызова сервиса, доступ к возвращённому узлу.
            long start_time = System.currentTimeMillis();
            try {
                Thread.sleep(100);
            } catch (Exception e) {
                e.printStackTrace();
            }

            int call_result = 0;  // Результат вызова возвращается, 0 указывает на успешный вызов, -1 указывает на аномалию вызова, -2 указывает на превышение времени вызова. Обратите внимание, что здесь возвращаемое значение относится к завершению вызываемого сервиса после вызова, а не к возвращаемому значению вызова интерфейса getRouter!
            long timecost = System.currentTimeMillis()-start_time;  // Время вызова сервиса, единица измерения — миллисекунды.

            router.resultReport(request, result.getData(), call_result, timecost); // Вызов интерфейса отчёта о результатах, передача запроса, возвращаемых данных и результатов вызова вместе с информацией о времени вызова сервиса.
        } else {
            System.out.println(result.getData().getResponseMsg());   // Ошибка поиска маршрута, печать информации об ошибке.
            System.out.println(result.getData().getIP());
        }

2. Получение списка узлов моделируемого сервиса

        RouterConfig.setSeerApiKey("apikey_from_ClientDemo");  // Настройка глобального ключа API, опционально, рекомендуется заполнить. Заполнить в соответствии с реальным apikey. Здесь только пример.

        Router router = RouterFactory.getInstance().createAgentRouter();  // Инициализация маршрута, использование режима агента. Если вы хотите использовать чистый API-способ, используйте метод инициализации в следующем комментарии.
//      Router router = RouterFactory.getInstance().createApiRouter(); 

        RoutersRequest request = new RoutersRequest();  // Создание запроса на получение списка узлов. Обратите внимание на разницу между запросом одного узла и этим запросом.
        request.setObj("tencent.tencentServer.HelloService");   // Установка имени моделируемого сервиса, который необходимо зарегистрировать заранее на платформе управления. Заполнение в соответствии с фактическим именем сервиса. Обязательно.
        request.setLbGetType(LBGetType.LB_GET_SET);     // Установка способа получения узлов, которые можно выбрать по группам, IDC или получить все. По умолчанию используется ALL, опционально.
        request.setSetInfo("sz.a.b");                   // Информация о наборе, которая должна быть заполнена при выборе группы по набору.

        Result<RoutersResponse> result = router.getRouters(request);
        int ret_code = result.getRet();                 // Возвращаемый код результата.
        if (ret_code == 0) {                            // Если код результата равен 0, вызов успешен.
            List<ServerNode> nodes = result.getData().getNode(); // Получение списка узлов.
            for (ServerNode node : nodes) {
                String IP = node.getsIP();
                int port = node.getPort();
                boolean istcp = node.isbTcp();
                System.out.println("get HelloService node: IP " + IP + " port " + port +
                        " protol " + (istcp ? " tcp": " udp"));
            }
        } else {
            System.out.println(result.getData().getResponseMsg());   // Ошибка поиска маршрута, печать информации об ошибке.
        }

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

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

1
https://api.gitlife.ru/oschina-mirror/Tencent-TSeer.git
git@api.gitlife.ru:oschina-mirror/Tencent-TSeer.git
oschina-mirror
Tencent-TSeer
Tencent-TSeer
master