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

OSCHINA-MIRROR/stephenmao-nexus

Клонировать/Скачать
README.md 3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 07.03.2025 05:34 f4cb4db

Nexus

Введение

Nexus — это простой rpc-фреймворк, который реализует основные функции rpc. В настоящее время он требует использования Spring, где Netty используется в качестве фреймворка для связи, а Kryo — как по умолчанию протокол сериализации. Выбор протоколов сериализации, балансировщиков нагрузки и центров регистрации осуществляется через SPI.

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

  • Установите проект локально и добавьте его в локальный Maven репозиторий;
  • Создайте пустое Spring Boot приложение;
  • Добавьте зависимости в pom.xml;
<dependency>
  <groupId>com.mao.nexus</groupId>
  <artifactId>nexus-spring-boot-starter</artifactId>
  <version>1.0.0</version>
</dependency>
  • Настройте конфигурацию в application.yml:
nexus:
  service-name: server-example
  port: 1234
  registry:
    protocol: consul
  cluster:
    load-balance: random
  max-connections: 20
  • Напишите сервис на серверной стороне;
@NexusService
public class TestServiceImpl implements TestService {

  @Value("${nexus.port}")
  private int port;

  private final List<User> userList = new ArrayList<>();

  private Random random = new Random();

  @PostConstruct
  public void init() {

    for (int i = 0; i < 10; i++) {
      User user = new User("Test" + i, i, random.nextInt(2), port);
      userList.add(user);
    }
  }

  @Override
  public String doTest(String var) {
    return String.format("Received, %s, my response: enough! ~ I am %d", var, port);
  }

  @Override
  public User getUser(String name) {
    return userList.stream()
        .filter(user -> user.getName().equals(name))
        .findAny()
        .orElse(null);
  }
}
  • Определите контроллер клиента;
@RestController
public class RpcController {
```  @NexusClient(serviceName = "server-example")
  private TestService testService;

  @GetMapping("/test/{par}")
  public String test2(@PathVariable String par) throws IOException {
    Random random = new Random();
    long l = random.nextLong();
    return testService.doTest(String.valueOf(l));
  }

  @GetMapping("/test3/{name}")
  public User test3(@PathVariable String name) {
    return testService.getUser(name);
  }
}
  • Запустите серверную и клиентскую части приложения и вызовите служебные интерфейсы через браузер img.png
  • Вызов успешен!!!
Пример

Дополнительные примеры можно найти в каталоге nexus-example.

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

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

1
https://api.gitlife.ru/oschina-mirror/stephenmao-nexus.git
git@api.gitlife.ru:oschina-mirror/stephenmao-nexus.git
oschina-mirror
stephenmao-nexus
stephenmao-nexus
master