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

OSCHINA-MIRROR/freezy7-curryx

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

Лёгкий RPC-фреймворк Curryx на Java

Проект

Фреймворк состоит из четырёх основных компонентов: клиент, сервер, сервис регистрации и сервис обнаружения. При использовании фреймворка сервер запускает сервис и регистрирует его в сервисе регистрации. Клиент находит сервис через сервис обнаружения и выполняет 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

В настоящее время поддерживается использование 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 )

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

Введение

Лёгкий rpc-фреймворк. Развернуть Свернуть
GPL-3.0
Отмена

Обновления

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

Участники

все

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

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