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

OSCHINA-MIRROR/huangyong-rpc

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

Распределенная система RPC — руководство по использованию

Текущая версия: 1.3.0

Дата выпуска: 2015-12-06

Журнал выпусков см. в документе RELEASE.md

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

См. модуль rpc-sample-api

package com.xxx.rpc.sample.api;

public interface HelloService {

    String hello(String name);
}

Необходимо хранить интерфейсы RPC и реализацию RPC в разных модулях.

Размещение сервиса RPC

См. модуль rpc-sample-server

Шаг 1: Добавление зависимости Maven

pom.xml

<!-- RPC Sample API -->
<dependency>
    <groupId>com.xxx.rpc</groupId>
    <artifactId>rpc-sample-api</artifactId>
    <version>${version.rpc}</version>
</dependency>

<!-- RPC Сервер -->
<dependency>
    <groupId>com.xxx.rpc</groupId>
    <artifactId>rpc-server</artifactId>
    <version>${version.rpc}</version>
</dependency>
  • RPC Sample API: зависимость от модуля с интерфейсами RPC
  • RPC Сервер: зависимость от фреймворка серверной части RPC

Шаг 2: Реализация интерфейсов RPC

package com.xxx.rpc.sample.server;

import com.xxx.rpc.sample.api.HelloService;
import com.xxx.rpc.server.RpcService;

@RpcService(HelloService.class)
public class HelloServiceImpl implements HelloService {

    @Override
    public String hello(String name) {
        return "Привет! " + name;
    }
}
  • Обязательно указывать интерфейс RPC в аннотации @RpcService
  • В случае наличия нескольких реализаций одного интерфейса RPC, следует указывать свойство version в аннотации @RpcService, чтобы различать между ними

Шаг 3: Настройка серверной части RPC

spring.xml```xml


    <context:property-placeholder location="classpath:rpc.properties"/>

    <!-- Регистрация сервиса -->
    <bean id="serviceRegistry" class="com.xxx.rpc.registry.zookeeper.ZooKeeperServiceRegistry">
        <constructor-arg name="zkAddress" value="${rpc.registry_address}"/>
    </bean>
<!-- RPC Сервер -->
<bean id="rpcServer" class="com.xxx.rpc.server.RpcServer">
    <constructor-arg name="serviceAddress" value="${rpc.service_address}"/>
    <constructor-arg name="serviceRegistry" ref="serviceRegistry"/>
</bean>
```
  • Service Registry: используется для регистрации сервисов; если реализован с использованием ZooKeeper, требуется указание адреса ZooKeeper, имени системы, номера экземпляра
  • RPC Сервер: используется для публикации RPC сервисов, требует указания порта сервера

Путь ZNode в ZooKeeper выглядит следующим образом: registry/service/address, где первые два узла являются постоянными, а последний — временным.

rpc.properties

rpc.service_address=127.0.0.1:8000
rpc.registry_address=127.0.0.1:2181
  • rpc.service_address: адрес для публикации RPC сервиса
  • rpc.registry_address: адрес сервера ZooKeeper

Четвёртый шаг: запуск RPC сервиса

package com.xxx.rpc.sample.server;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class RpcBootstrap {

    public static void main(String[] args) {
        new ClassPathXmlApplicationContext("spring.xml");
    }
}

Запустив класс RpcBootstrap, будет запущен RPC сервис и произведена его регистрация.

Вызов RPC сервиса

См. модуль rpc-sample-client

Первый шаг: добавление зависимости Maven

<!-- Пример API RPC -->
<dependency>
    <groupId>com.xxx.rpc</groupId>
    <artifactId>rpc-sample-api</artifactId>
    <version>${version.rpc}</version>
</dependency>
```<!-- Клиент RPC -->
<dependency>
    <groupId>com.xxx.rpc</groupId>
    <artifactId>rpc-client</artifactId>
    <version>${version.rpc}</version>
</dependency>
  • Пример API RPC: зависимость от модуля, содержащего RPC интерфейсы
  • Клиент RPC: зависимость от клиентского фреймворка RPC

Второй шаг: конфигурирование клиента RPC

spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
<context:property-placeholder location="classpath:rpc.properties"/>

<!-- Определение сервиса discovery -->
<bean id="serviceDiscovery" class="com.xxx.rpc.registry.zookeeper.ZooKeeperServiceDiscovery">
    <constructor-arg name="zkAddress" value="${rpc.registry_address}"/>
</bean>

<!-- Определение RPC прокси -->
<bean id="rpcProxy" class="com.xxx.rpc.client.RpcProxy">
    <constructor-arg name="serviceDiscovery" ref="serviceDiscovery"/>
</bean>

</beans>
  • Сервис discovery: используется для открытия доступа к службе discovery, если используется реализация ZooKeeper, то требуется указание адреса ZooKeeper
  • RPC Прокси: используется для получения интерфейса RPC прокси

rpc.properties

rpc.registry_address=127.0.0.1:2081
  • rpc.registry_address: адрес сервера ZooKeeper (IP-адрес и порт)

Шаг 3: Вызов RPC службы

@Autowired
private RpcProxy rpcProxy; // 1

...

HelloService helloService = rpcProxy.create(HelloService.class); // 2
String result = helloService.hello("World"); // 3
```1. Инжекция объекта RpcProxy
2. Вызов метода `create` объекта RpcProxy для создания интерфейса RPC-прокси
3. Вызов метода интерфейса RPC-прокси, как если бы это был вызов удалённого интерфейса

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

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

Введение

Лёгкая распределённая RPC-инфраструктура. Развернуть Свернуть
Отмена

Обновления

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

Участники

все

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

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