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

OSCHINA-MIRROR/cc_1234-java-groupco-rpc

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

GroupCo-java

Основные характеристики

  • Поддержка вызова внутренних сервисов
  • Поддержка клиентских вызовов GroupCo
  • Поддержка регистрации центра Redis, открытия и регистрации сервисов
  • Клиентское кэширование
  • Грациозное завершение работы сервиса
  • Переключение при сбое (в процессе выполнения)

Предоставление сервиса

Определение сервисного интерфейса

DemoService.java

package co.demo.server;

import co.server.annotation.Param;

public interface DemoService {
    String sayHello(@Param("name") String name);
}

Реализация интерфейса в стороне предоставления сервиса

DemoServiceImpl

package co.demo.server;

import co.server.annotation.Param;
import org.springframework.stereotype.Service;

@Service("demoService")
public class DemoServiceImpl implements DemoService {
    public String sayHello(@Param("name") String name) {
        return "Hello " + name;
    }
}

Объявление открытых сервисов с помощью конфигурации Spring

app.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"
       xmlns:redisson="http://redisson.org/schema/redisson"
       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 http://redisson.org/schema/redisson http://redisson.org/schema/redisson/redisson.xsd">

    <context:component-scan base-package="co.demo.server"/>
    <context:component-scan base-package="co.server"/>
    <bean id="ApplicationContextUtil" class="co.server.context.ApplicationContextUtil"></bean>

    <bean id="groupCoServer" class="co.server.CoServer">
        <property name="serviceName" value="Demo"/>
        <property name="port" value="8099"/>
        <!-- Открытые сервисы -->
        <property name="services">
            <map>
                <entry key="demoService">
                    <map>
                        <entry key="interface" value="co.demo.server.DemoService"/>
                    </map>
                </entry>
            </map>
        </property>
    </bean>
    
    <!-- Использование Redis как центральной точки регистрации -->
    <redisson:client id="coRedissonClient" codec-ref="codec">
        <redisson:single-server address="redis://127.0.0.1:6379"/>
    </redisson:client>
    <bean id="codec" class="org.redisson.client.codec.StringCodec"/>
    <bean id="redisKeyUtil"
          class="co.server.common.util.RedisKeyUtil">
        <property name="prefix" value="demo"></property>
    </bean>
</beans>

Загрузка конфигурации Spring

ServiceProvider.java

import co.server.CoServer;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ServiceProvider {

    public static void main(String[] args) throws Exception {
        System.out.println("Сервис запущен...");
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:app.xml");
        context.start();
    }
}

Конечный потребитель сервиса

Указание удаленного сервиса через конфигурацию Spring

<?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"
       xmlns:redisson="http://redisson.org/schema/redisson"
       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 http://redisson.org/schema/redisson http://redisson.org/schema/redisson/redisson.xsd">

    <context:component-scan base-package="co.server"/>
    <bean id="ApplicationContextUtil" class="co.server.context.ApplicationContextUtil"></bean>

    <bean id="groupCoServer" class="co.server.CoServer">
        <property name="serviceName" value="DemoClient"/>
        <property name="port" value="8098"/>
        <!-- Зависящие сервисы -->
        <property name="references">
            <map>
                <entry key="demoService">
                    <map>
                        <entry key="serverName" value="Demo"></entry>
                        <entry key="interface" value="co.demo.server.DemoService"/>
                    </map>
                </entry>
            </map>
        </property>
    </bean>

    <redisson:client id="coRedissonClient" codec-ref="codec">
        <redisson:single-server address="redis://127.0.0.1:6379"/>
    </redisson:client>
    <bean id="codec" class="org.redisson.client.codec.StringCodec"/>
    <bean id="redisKeyUtil"
          class="co.server.common.util.RedisKeyUtil">
        <property name="prefix" value="demo"></property>
    </bean>
</beans>

Загрузка конфигурации Spring и вызов удаленного сервиса

Consumer.java

import co.demo.server.DemoService;
import co.server.CoServer;
import co.server.Services;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Consumer {
    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:app.xml");
        context.start();

        DemoService demoService = Services.getBean("demoService");
        String hello = demoService.sayHello("world"); // Вызов удаленного метода
        System.out.println(hello); // Вывод результата вызова
    }
}

Вызовы на PHP

Использование TCP-клиента Group-Co для вызова сервиса

Установите параметры в config/app.php
        'protocol' => 'buf',
        // Формат пакета данных json, serialize
        'pack' => 'json',
        // Активировать gzip-сжатие true, false
        'gzip' => false,
Вызов сервиса через сервис-центр
    $service = (yield service_center('Demo'));
    $res = (yield $service->call("Demo::sayHello", ['name' => 'world']));
    dump($res);
Асинхронный вызов через TCP-клиент
    $tcp = new AsyncTcp('127.0.0.1', 8099);
    $res = (yield $tcp->call(['cmd' => 'Demo\\Demo::sayHello', 'data' => ['name' => 'world']]));

    // Будет возвращено
    // {"cmd":"Demo\\Demo::sayHello","code":200,"data":"Hello world","type":"json","version":"1.0.0"}

Вызовы через клиента Swoole

    <?php

    $client = new Swoole\Client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
    $client->set(array(
        'open_length_check' => true,
        'package_length_type' => 'N',
        'package_max_length' => 2000000,
        'package_length_offset' => 0,
        'package_body_offset'   => 4,
    ));

    $client->on("connect", function($cli) {
        $cmd   = "Demo\\Demo::sayHello";
        $data   = array('name' => 'world');
        $bin_body   = pack("a*", json_encode(['cmd' => $cmd, 'data' => $data]));
        $body_len   = strlen($bin_body);
        $bin_head   = pack("N", $body_len);
        $bin_data   = $bin_head . $bin_body;
        $cli->send($bin_data);
    });
    $client->on("receive", function($cli, $data){
        $data = substr($data, 4);
        echo "Получено: ".$data."\n";
    });
    $client->on("error", function($cli){
        echo "Подключение не удалось\n";
    });
    $client->on("close", function($cli){
        echo "Соединение закрыто\n";
    });

    $client->connect('127.0.0.1', 8099, 0.5);

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

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

Введение

Поставщик базовых услуг GroupCo, версия java. Можно бесшовно переключаться со слоем сервисов GroupCo. Развернуть Свернуть
Отмена

Обновления

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

Участники

все

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

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