Фреймворк состоит из четырёх основных компонентов: клиент, сервер, сервис регистрации и сервис обнаружения. При использовании фреймворка сервер запускает сервис и регистрирует его в сервисе регистрации. Клиент находит сервис через сервис обнаружения и выполняет RPC-вызов.
Если вы используете Maven для сборки проекта, скачайте исходный код и упакуйте его в jar-файл. Затем добавьте файл в локальный или удалённый репозиторий (mvn install или mvn deploy). После этого добавьте следующие зависимости в pom.xml вашего проекта:
<!-- server添加如下依赖 -->
<dependency>
<groupId>com.freestyledash</groupId>
<artifactId>curry-rpcServer</artifactId>
<version>x.x.x</version>
</dependency>
<!-- client添加如下依赖 -->
<dependency>
<groupId>com.freestyledash</groupId>
<artifactId>curry-rpcClient</artifactId>
<version>x.x.x</version>
</dependency>
В настоящее время поддерживается использование ZooKeeper в качестве сервиса имён. Для загрузки и использования обратитесь к официальной документации.
Разработайте интерфейс для объявления доступных сервисов. Эти интерфейсы будут использоваться клиентом и сервером. Пример:
public interface Helloworld {
String hellow();
}
Реализуйте метод как сервис. Этот сервис будет автоматически зарегистрирован на сервере при запуске. Пример:
@Service(name = Helloworld.class, version = "develop")
public class HelloworldImpl implements Helloworld {
@Override
public String hellow() {
return "helloworld";
}
}
Используйте Spring для организации компонентов и запуска. Отредактируйте файл конфигурации Spring:
<!--配置spring扫描需要作为服务的类所在的包-->
<context:component-scan base-package="server"/>
<!--RPC Server配置-->
<!--服务注册与发现-->
<bean id="serviceRegistry"
class="com.freestyledash.curryx.registry.impl.ZooKeeperServiceRegistry">
<!--zookeeper地址-->
<constructor-arg name="zkAddress" value="127.0.0.1:2181"/>
<constructor-arg name="serviceRoot" value="/x"/>
</bean>
<!--通讯服务器-->
<bean id="nettyServer" class="com.freestyledash.curryx.server.server.impl.NettyServer"/>
<!--服务加载工具-->
<bean id="springServiceLoader"
class="com.freestyledash.curryx.serviceContainer.impl.spring.SpringServiceContainer"/>
<!--server-->
<bean id="rpcServer" class="com.freestyledash.curryx.rpcServer.RPCServer">
<!--服务器注册在zookeeper中的地址,客户端使用改地址和服务器进行通讯-->
<constructor-arg name="loader" ref="springServiceLoader"/>
<constructor-arg name="serviceRegistry" ref="serviceRegistry"/>
<constructor-arg name="server" ref="nettyServer"/>
<constructor-arg name="serverName" value="rpcServerdemo"/>
</bean>
Запустите сервер с помощью кода:
ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
RPCServer serverBootstrap = context.getBean(RPCServer.class);
serverBootstrap.start();
Журнал покажет загрузку объектов служб, запуск сервера связи и регистрацию служб.
Отредактируйте файл конфигурации Spring:
<!--负载均衡-->
<bean class="com.freestyledash.curryx.discovery.util.balance.impl.RandomBalancer" id="randomBalancer"/>
<!--服务发现-->
<bean class="com.freestyledash.curryx.discovery.impl.ZooKeeperServiceDiscovery" id="serviceDiscovery"
scope="singleton">
<constructor-arg name="balancer" ref="randomBalancer"/>
<constructor-arg name="serviceRoot" value="/x"/>
<constructor-arg name="zkAddress" value="127.0.0.1:2181"/>
</bean>
<!--请求发送组件-->
<bean class="com.freestyledash.curryx.client.netty.RPCRequestLauncher" id="launcher">
<constructor-arg name="eventLoopThreadCount" value="2"/>
</bean>
<!--rpc客户端-->
<bean class="com.freestyledash.curryx.rpcClient.RPCClient" id="rpcClient" scope="singleton">
<constructor-arg name="serviceDiscovery" ref="serviceDiscovery"/>
<constructor-arg name="launcher" ref="launcher"/>
</bean>
Вызовите сервис с помощью кода:
RPCClient client = ApplicationContextHolder.getContext().getBean(RPCClient.class);
T t = client.create(Class<T> tClazz);
t.dosth();
Инструмент сериализации, использующий фреймворк Google ProtoStuff, не может правильно сериализовать объекты BigDecimal.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )