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

OSCHINA-MIRROR/diwi-gothrift

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

GoThrift — thrift-сервисы

Преимущества:

  1. Регистрация и публикация сервера, а также автоматическое обнаружение клиентом сервисов. При изменении количества экземпляров серверной части не требуется вручную изменять конфигурационный файл. В качестве регистрационного центра используется zookeeper, для обработки регистрации/обнаружения/подписки сервисов применяется инструмент curator-recipes;
  2. Клиент использует динамический прокси, что делает вызовы RPC от клиента к серверу прозрачными для пользователя;
  3. У клиента есть пул соединений, который повышает производительность;
  4. Стратегия балансировки нагрузки: в настоящее время поддерживается случайный выбор и циклический перебор, в будущем планируется поддержка взвешенного циклического перебора и стратегии наименьшего соединения;
  5. Используется конфигурация Spring, которая упрощает интеграцию с приложением и снижает его вмешательство. Достаточно использовать Spring для загрузки конфигурации GoThrift.

Использование:

Сервер: настройка с помощью Spring для объявления открытых сервисов
<!-- Адрес регистрационного центра Address of registry center -->
<thrift:registry id="registryConfig" address="127.0.0.1:2181"/>

<!-- Порт прослушивания сервера The Server listening port -->
<thrift:protocol port="29090"/>

<bean id="helloWorldService" class="com.diwi.gothrift.test.HelloWorldServiceImpl"/>

<bean id="appService" class="com.diwi.gothrift.core.spring.ServicePublisher"/>
Сервер: реализация интерфейса на стороне поставщика услуг
@GoService(name = "helloWorldService", processor = HelloWorldService.Processor.class, iface = HelloWorldService.Iface.class)
public class HelloWorldServiceImpl implements HelloWorldService.Iface {
    private static final Logger logger = LoggerFactory.getLogger(HelloWorldService.class);

    @Override
    public String sayHello(String username) throws TException {
        logger.info("called, username is {}", username);
        return "hello " + username;
    }
}
Клиент: использование удалённых сервисов через Spring
<!-- Адрес регистрационного центра Address of registry center -->
<thrift:registry id="registryConfig" address="127.0.0.1:2181"/>

<thrift:reference id="helloWorldService" interface="com.diwi.gothrift.test.HelloWorldService" loadbalance="roundrobin"/>

Рекомендуется перед настройкой GoThrift настроить пул подключений, иначе каждый вызов RPC будет создавать новый экземпляр сокета для связи:

<bean id="pool" class="com.diwi.gothrift.core.pool.ThriftConnectionPool">
      <property name="maxTotal" value="20"/>
      <property name="maxTotalPerKey" value="10"/>
      <property name="maxIdlePerKey" value="10"/>
      <property name="testOnBorrow" value="true"/>
      <property name="testOnReturn" value="true"/>
      <property name="testWhileIdle" value="true"/>
      <property name="conTimeOut" value="2000"/>
      <property name="maxWait" value="5000"/>
</bean>
Клиент: загрузка конфигурационного файла Spring и вызов удалённого сервиса
@Test
public void testClient1() throws TException, IOException, InterruptedException {
    ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:client.xml",
            "classpath:pool.xml");
    HelloWorldService.Iface helloClient = (HelloWorldService.Iface) applicationContext.getBean("helloWorldService");

    asyncCall(helloClient);

    applicationContext.close();
}

Конфигурация:

  1. Серверная конфигурация
    • Конфигурационный файл thrift:service/

      Свойство Обязательно Тип По умолчанию Описание
      name необязательно String имя сервиса, которое должно использоваться при вызове клиентом
      interface обязательно String интерфейс сервиса (thrift генерирует класс интерфейса из IDL-файла, например, DemoService$Iface)
      ref обязательно String ссылка на объект реализации сервиса
      version необязательно String 1.0 версия сервиса, обычно обновляется при несовместимости интерфейсов
      registry необязательно String по умолчанию регистрируется во всех реестрах регистрирует сервис в указанном реестре, значение соответствует свойству id в thrift:registry, несколько реестров разделяются запятыми
      loadbalance необязательно String балансировка нагрузки, поддерживает случайный и циклический (с учётом веса) перебор
      weight необязательно int 1 весовой коэффициент
      delay необязательно int 0 задержка раскрытия сервиса, измеряется в миллисекундах
    • Аннотация @GoService

      Свойство Обязательно По умолчанию Описание
      name обязательно имя сервиса
      processor обязательно значение должно быть статическим внутренним классом Processor класса сервиса thrift
      iface обязательно значение должно быть статическим внутренним классом Iface класса сервиса thrift

Примечание: версия, балансировка нагрузки, вес и реестр аналогичны конфигурации файла

  1. Конфигурация клиента thrift:reference/

    Свойство Обязательно По умолчанию Описание
    id обязательно идентификатор Bean для ссылки на сервис
    interface обязательно интерфейс сервиса (thrift генерирует интерфейс из IDL-файла, например, DemoService)
    registry необязательно по умолчанию получает список сервисов из всех реестров и объединяет результаты получает список сервисов из указанного реестра, значение соответствует свойству id в thrift:registry, несколько реестров разделяются запятыми
    proxy необязательно jdk способ проксирования при клиентском вызове: jdk или cglib
    timeout необязательно 0, клиент будет ждать завершения обработки сервером время подключения и чтения данных при удалённом вызове клиента, измеряется в миллисекундах

Примечание: версия и балансировка нагрузки аналогичны серверной конфигурации

  1. Конфигурация реестра thrift:registry/

    Свойство Обязательно Тип По умолчанию Описание
    id необязательно String идентификатор реестра, должен совпадать с указанным в серверной и клиентской конфигурациях при использовании определённого реестра
    address обязательно String адрес реестра, формат ip:port, несколько адресов разделяются запятой
    group необязательно String gothrift по умолчанию группа, сервисы регистрируются в zk под указанным корневым узлом Таблица свойств протокола Thrift
Свойство Обязательно Тип Значение по умолчанию Описание
host Необязательно String Автоматическое определение IP-адреса локального хоста Имя главного сервера. Если оставить пустым, будет автоматически определён IP-адрес локального хоста. Рекомендуется не настраивать это значение, чтобы позволить фреймворку автоматически получить IP-адрес хоста.
port Необязательно int 40880; при занятости будет выбран следующий доступный порт Номер порта сервера для интерфейса Thrift.

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

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

Введение

Компоненты для сервизации Thrift, которые предоставляют возможности автоматического регистрирования и обнаружения сервисов, что делает вызовы Thrift RPC прозрачными для разработчиков. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

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

Участники

все

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

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