Текущая версия: 1.3.0
Дата выпуска: 2015-12-06
Журнал выпусков см. в документе RELEASE.md
См. модуль
rpc-sample-api
package com.xxx.rpc.sample.api;
public interface HelloService {
String hello(String name);
}
Необходимо хранить интерфейсы RPC и реализацию RPC в разных модулях.
См. модуль
rpc-sample-server
<!-- 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>
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;
}
}
@RpcService
version
в аннотации @RpcService
, чтобы различать между ними
<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>
Путь ZNode в ZooKeeper выглядит следующим образом: registry/service/address
, где первые два узла являются постоянными, а последний — временным.
rpc.service_address=127.0.0.1:8000
rpc.registry_address=127.0.0.1:2181
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-sample-client
<!-- Пример 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>
<?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>
rpc.registry_address=127.0.0.1:2081
@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 )