GoThrift — thrift-сервисы
<!-- Адрес регистрационного центра 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;
}
}
<!-- Адрес регистрационного центра 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>
@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();
}
Конфигурационный файл 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 |
Примечание: версия, балансировка нагрузки, вес и реестр аналогичны конфигурации файла
Конфигурация клиента thrift:reference/
Свойство | Обязательно | По умолчанию | Описание |
---|---|---|---|
id | обязательно | идентификатор Bean для ссылки на сервис | |
interface | обязательно | интерфейс сервиса (thrift генерирует интерфейс из IDL-файла, например, DemoService) | |
registry | необязательно | по умолчанию получает список сервисов из всех реестров и объединяет результаты | получает список сервисов из указанного реестра, значение соответствует свойству id в thrift:registry, несколько реестров разделяются запятыми |
proxy | необязательно | jdk | способ проксирования при клиентском вызове: jdk или cglib |
timeout | необязательно | 0, клиент будет ждать завершения обработки сервером | время подключения и чтения данных при удалённом вызове клиента, измеряется в миллисекундах |
Примечание: версия и балансировка нагрузки аналогичны серверной конфигурации
Конфигурация реестра thrift:registry/
Свойство | Обязательно | Тип | По умолчанию | Описание |
---|---|---|---|---|
id | необязательно | String | идентификатор реестра, должен совпадать с указанным в серверной и клиентской конфигурациях при использовании определённого реестра | |
address | обязательно | String | адрес реестра, формат ip:port, несколько адресов разделяются запятой | |
group | необязательно | String | gothrift по умолчанию | группа, сервисы регистрируются в zk под указанным корневым узлом Таблица свойств протокола Thrift |
Свойство | Обязательно | Тип | Значение по умолчанию | Описание |
---|---|---|---|---|
host | Необязательно | String | Автоматическое определение IP-адреса локального хоста | Имя главного сервера. Если оставить пустым, будет автоматически определён IP-адрес локального хоста. Рекомендуется не настраивать это значение, чтобы позволить фреймворку автоматически получить IP-адрес хоста. |
port | Необязательно | int | 40880; при занятости будет выбран следующий доступный порт | Номер порта сервера для интерфейса Thrift. |
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )