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

OSCHINA-MIRROR/weizhu66-swufer-rpc

Клонировать/Скачать
README.md 11 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 03.06.2025 08:01 fae5871

Swufer-RPC

Описание

Легковесный, высокопроизводительный и удобный в использовании фреймворк RPC, использующий gRPC для коммуникации. Поддерживает SpringBoot и включает в себя функции управления сервисами, такие как регистрация и обнаружение сервисов, балансировка нагрузки, ограничение по количеству запросов, отказоустойчивость и другие. Цель проекта — помочь разработчикам Java получить опыт разработки, близкий к работе с локальными сервисами, и использовать легковесный, но высокопроизводительный фреймворк RPC.#### Описание проекта

  1. Возможность использования gRPC без необходимости создания файлов protobuf, простой и удобный API, минимальная дополнительная конфигурация, что обеспечивает опыт разработки, близкий к работе с монолитными проектами.

  2. Использование gRPC для сетевой коммуникации и protobuf для сериализации данных, что обеспечивает высокую производительность.

  3. Абстрактные модули с сильной расширяемостью.

  4. Использование Zookeeper в качестве центра регистрации, что обеспечивает функции регистрации и обнаружения сервисов, поддержка кэширования адресов сервисов на стороне клиента, реальное время отслеживание подключения и отключения сервисов.

  5. Удобное аннотированное программирование на основе SpringBoot, а также возможность работы без использования фреймворка.

  6. Поддержка синхронного, асинхронного и обобщенного вызова.

  7. Поддержка балансировки нагрузки на стороне клиента, реализованы случайная балансировка нагрузки с весами, алгоритм консистентного хэширования, возможность настройки пользовательского алгоритма балансировки нагрузки. Возможность указания адреса сервиса для вызова, обход центра регистрации.

  8. Максимальное время ожидания вызова на стороне клиента, повторные попытки при превышении времени ожидания.

  9. Поддержка ограничения по количеству запросов на уровне интерфейса и метода на стороне сервера. 10.Поддержка цепочки фильтров на стороне сервера и клиента, возможность подключения пользовательских фильтров, расширяемость.

  10. Предоставление механизма отказоустойчивости, включающего быстрое отключение, повторные попытки, отказоустойчивость и другие стратегии, возможность настройки пользовательской стратегии отказоустойчивости.

  11. Использование локального метода мокирования при неудачном вызове на стороне клиента.

  12. Предоставление механизма контекста, что позволяет передавать параметры между поставщиками и потребителями сервиса.

  13. Поддержка механизма токенов, что позволяет клиенту вызывать сервисы с использованием токенов.

  14. Отслеживание цепочки вызовов с помощью traceId.

  15. Грациозное запуск сервиса, задержка регистрации сервиса в центре регистрации после запуска, что предотвращает внезапное появление большого объема трафика.

  16. Грациозное завершение работы сервиса, отклонение новых запросов при отключении или перезапуске сервиса, завершение обработки текущих запросов перед закрытием сервера, что предотвращает неудачное завершение обработки запросов.

  17. Автоматическое удаление адресов удаленных сервисов из кэша клиента при достижении порогового значения неудачных запросов.#### Инструкция по установке

  18. git clone https://gitee.com/weizhu66/swufer-rpc.git

  19. mvn compile

  20. mvn install

  21. В свой проект добавьте зависимость в файл pom.xml

        <dependency>
            <groupId>com.weizhu</groupId>
            <artifactId>swufer-core</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

Инструкция по использованию

1. Использование через проект SpringBoot

Сервис-поставщик

@SwuferService  //Добавьте аннотацию к реализующему классу для регистрации сервиса
public class DemoServiceImpl implements DemoService {

    @Override
    public String hello(String name) {
        return "hello from " + name;
    }
}

Сервис-поставщик, запуск проекта

@SpringBootApplication  
@EnableSwuferAutoStart  //Добавьте эту аннотацию для автоматического запуска RPC-сервера
public class App {

    public static void main(String[] args) throws InterruptedException {
        SpringApplication.run(App.class, args);
        new CountDownLatch(1).await();
    }
}

Сервис-поставщик, конфигурация application.yml

swufer:
  rpc:
    registryType: zookeeper
    registryAddress: 127.0.0.1:2181  #адрес zookeeper
    port: 8001        #порт grpc-сервера
    weight: 100       #вес сервиса

Сервис-потребитель

@RestController
public class ConsumerController {

    @SwuferReference  //Добавьте эту аннотацию для прямого внедрения агента
    DemoService demoService;

    @SwuferReference  //Добавьте эту аннотацию для прямого внедрения агента обобщенного вызова
    GenericService genericService;

    private static final int nThread = 30;

    private static final ExecutorService pool = Executors.newFixedThreadPool(nThread);

    @RequestMapping("test/hello")
    public String testSync(@RequestParam("name") String name) throws ExecutionException, InterruptedException {
        return demoService.hello(name);
    }
```    @RequestMapping("test/generic")
    public String testGeneric(@RequestParam("name") String name){
        try {
            return (String) genericService.$invoke("com.weizhu.swufer.api.demo.DemoService", "hello",
                    "generic_test");
        } catch (RpcException e) {

            return e.getCode() + e.getMessage();
        }
    }

}

Сервис-потребитель, конфигурация application.yml

swufer:
  rpc:
    registryType: zookeeper
    registryAddress: 127.0.0.1:2181

#    cluster: FailBackMockCluster
#    loadBalancer: RandomLoadBalancer
server:
  port: 8080
```**Использование gRPC-сервиса на SpringBoot с помощью нескольких аннотаций и конфигураций**

##### 2. Вызов без использования фреймворка Java
Серверная часть:
public static void testService() throws IOException {
    //registry: адрес Zookeeper
    //port: порт gRPC-коммуникации
    //scanRpcService: путь к пакету, содержащему классы с аннотацией @SwuferService
    SwuferBootstrap bootstrap = SwuferBootstrap.newBuilder().registry("127.0.0.1:2181")
            .port(8001).scanRpcService("com.weizhu.swufer.testprovider.demo").buildBootstrap();
    //Запуск сервера
    bootstrap.start();
    new CountDownLatch(1).await();
}

Клиентская часть:

public class UnitTest {

private static SwuferBootstrap bootstrap = SwuferBootstrap.newBuilder().registry("127.0.0.1:2181")
        .buildBootstrap();

public static void main(String[] args) {
    testProxy();
}

public static void testProxy(){
    ReferenceConfig config = ReferenceConfig.ref(DemoService.class);

    DemoService reference = (DemoService) bootstrap.getReference(config);
    String result = reference.hello("hello from swufer");
    System.out.println(result);
}

}


#### Участие в проекте

1.  Fork этого репозитория
2.  Создайте ветку Feat_xxx
3.  Подайте Pull Request

#### Фичи1. Используйте Readme_XXX.md для поддержки различных языков, например Readme_en.md, Readme_zh.md
2. Официальный блог Gitee [blog.gitee.com](https://blog.gitee.com)
3. Вы можете [https://gitee.com/explore](https://gitee.com/explore) для просмотра лучших проектов на Gitee
4. [GVP](https://gitee.com/gvp) — это Gitee Most Valuable Open Source Project, лучшие проекты, оцененные по определенным критериям
5. Официальная документация Gitee [https://gitee.com/help](https://gitee.com/help)
6. Секция Gitee Stars для представления лучших участников Gitee [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/weizhu66-swufer-rpc.git
git@api.gitlife.ru:oschina-mirror/weizhu66-swufer-rpc.git
oschina-mirror
weizhu66-swufer-rpc
weizhu66-swufer-rpc
master