Перевод текста на русский язык:
<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-служб, требуется указать порт сервера.
Следующая конфигурация указывает на подключение к локальному серверу ZooKeeper и публикацию RPC-службы на порту 8000:
# Сервер ZooKeeper (центр регистрации)
rpc.registry_address = 127.0.0.1:2181
# RPC-служба
rpc.service_address = 127.0.0.1:8000
Запустите 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-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>
<?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
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 )