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

OSCHINA-MIRROR/veal98-RPC-FromScratch

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

Перевод текста на русский язык:

<context:component-scan base-package="com.cswiki.rpc.sample.server"></context:component-scan>

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

serviceRegistry: используется для регистрации сервисов (реализовано с помощью ZooKeeper), требуется указать адрес ZooKeeper, имя системы, номер экземпляра.

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

rpcServer: используется для публикации RPC-служб, требуется указать порт сервера.

rpc.properties

Следующая конфигурация указывает на подключение к локальному серверу ZooKeeper и публикацию RPC-службы на порту 8000:

# Сервер ZooKeeper (центр регистрации)
rpc.registry_address = 127.0.0.1:2181

# RPC-служба
rpc.service_address = 127.0.0.1:8000

Запуск / публикация RPC-службы

Запустите RpcBootstrap, чтобы опубликовать RPC-службу и зарегистрировать её (фактически это загрузка Spring-конфигурации).

package com.cswiki.rpc.sample.server;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Запуск сервера и публикация службы (фактически загрузка spring-конфигурации)
 */
public class RpcBootstrap {

    public static void main(String[] args) {
        // Загрузка Spring-конфигурации
        new ClassPathXmlApplicationContext("spring.xml");
    }
}

Вызов RPC-службы

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

Добавление зависимостей

<dependencies>
    <!--Зависимость от RPC-клиентского фреймворка-->
    <dependency>
        <groupId>com.cswiki</groupId>
        <artifactId>rpc-client</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>compile</scope>
    </dependency>

    <!--Зависимость от модуля, содержащего RPC-интерфейсы-->
    <dependency>
        <groupId>com.cswiki</groupId>
        <artifactId>rpc-sample-api</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>compile</scope>
    </dependency>

    <!--Зависимость от модуля, содержащего центр регистрации-->
    <dependency>
        <groupId>com.cswiki</groupId>
        <artifactId>rpc-registry-zookeeper</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>compile</scope>
    </dependency>

    <!--Spring-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.1</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

Конфигурация 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"/>

    <bean id="serviceDiscovery" class="com.cswiki.rpc.registry.zookeeper.ZooKeeperServiceDiscovery">
        <constructor-arg name="zkAddress" value="${rpc.registry_address}"/>
    </bean>

    <bean id="rpcProxy" class="com.cswiki.rpc.client.RpcProxy">
        <constructor-arg name="serviceDiscovery" ref="serviceDiscovery"/>
    </bean>

</beans>
``` **serviceDiscovery**: используется для обнаружения сервисов (реализовано с помощью ZooKeeper), необходимо предоставить адрес ZooKeeper.

- **rpcProxy**: используется для получения интерфейса RPC-прокси.

#### rpc.properties
```properties
# Адрес сервера ZooKeeper (IP-адрес и порт)
rpc.registry_address=127.0.0.1:2181

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

package com.cswiki.rpc.sample.client;

import com.cswiki.rpc.client.RpcProxy;
import com.cswiki.rpc.sample.api.HelloService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class HelloClient {

    public static void main(String[] args) throws Exception {
        // Загрузка Spring-конфигурационного файла
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        // Получение объекта динамического прокси RpcProxy
        RpcProxy rpcProxy = context.getBean(RpcProxy.class);

        /**
         * Тестирование реализации класса 1 интерфейса HelloService
         */
        // Вызов метода create объекта RpcProxy для создания RPC-интерфейса прокси
        HelloService helloService = rpcProxy.create(HelloService.class);
        // Вызов метода RPC-интерфейса прокси (вызов удаленного метода интерфейса так же прост, как вызов локального метода)
        String result = helloService.hello("World");
        System.out.println(result);


        /**
         * Тестирование реализации класса 2 интерфейса HelloService
         */
        HelloService helloServiceImpl2 = rpcProxy.create(HelloService.class, "helloServiceImpl2");
        String result2 = helloServiceImpl2.hello("Java");
        System.out.println(result2);


        System.exit(0);
    }
}

🎨 Полное руководство

Для новичков. Не критикуйте, если вы опытный специалист. Логика не сложная, для тех, кто знаком с Netty и RPC, можно сразу приступать к написанию кода.

🔗 Адрес здесь: Программирование полно звезд - Руководство по написанию RPC и подробные объяснения интервью

🔗 Адрес здесь: Программирование полно звезд - Руководство по написанию RPC и подробные объяснения интервью

🔗 Адрес здесь: Программирование полно звезд - Руководство по написанию RPC и подробные объяснения интервью

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

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

Введение

Создайте облегчённый распределённый RPC-фреймворк с нуля на основе Spring, Netty, Protostuff и Zookeeper. Развернуть Свернуть
MIT
Отмена

Обновления

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

Участники

все

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

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