Платформа RPC, реализованная с помощью Netty, подходит для Spring Boot, Spring Cloud.

Spring Boot Java Spring Netty

License Maven Central

README: English | китайский язык

Что такое BootNettyRpc?

BootNettyRpc — это инфраструктура Rpc, реализованная Netty, подходящая для проектов Spring Boot и поддерживающая Spring Cloud. В настоящее время поддерживаются версии Spring Boot 1.5.x, а версии Spring Cloud — версии D и E.

как использовать?

Он делится на локальный запуск и комбинированный запуск Spring Cloud. Подробности см. в примере case.Теперь для иллюстрации используется локальный кейс, а кейс Spring Cloud опущен.

BootNetTyRPC включает в себя серверную и клиентскую части.

Сторона сервера

Добавьте зависимости в файл pom:

 <dependency>
       <groupId>io.github.forezp</groupId>
        <artifactId>boot-netty-rpc-core</artifactId>
        <version>1.0.5</version>
 </dependency>
 
скопировать код

Добавьте аннотацию @EnableNettyRpc в стартовый проект Spring Boot, вам нужно включить сканирование пакетов, вы можете оставить его пустым, оно будет сканировать глобально, что немного влияет на скорость запуска, например ExampleRpcServerApplication в примере:

@SpringBootApplication
@EnableNettyRpc(basePackages = "com.forezp")
public class ExampleRpcServerApplication {

    public static void main(String[] args) {
        SpringApplication.run( ExampleRpcServerApplication.class, args );
    }
}

скопировать код

Настройте порт Netty Server и имя Netty Server в файле конфигурации, и имя будет именем вызова клиента.

server:
  port: 7001

netty.server.name: server
netty.server.port: 6001

скопировать код

Напишите сервис со следующим интерфейсом:


public interface IGreeting {

    String sayHello(String name);
}
скопировать код

Класс реализации выглядит следующим образом:

@Service
public class Greeting implements IGreeting {
    @Override
    public String sayHello(String name) {
        return "hi "+name;
    }
}

скопировать код

Клиент

Добавьте следующие зависимости в pom-файл проекта:

 <dependency>
       <groupId>io.github.forezp</groupId>
        <artifactId>boot-netty-rpc-core</artifactId>
        <version>1.0.5</version>
</dependency>

скопировать код

Добавьте аннотацию @EnableNettyRpc в класс запуска SpringBoot следующим образом:

@SpringBootApplication
@EnableNettyRpc(basePackages = "com.forezp")
@RestController
public class ExampleRpcClientApplication {

    public static void main(String[] args) {
        SpringApplication.run( ExampleRpcClientApplication.class, args );
    }
}

скопировать код

В файле конфигурации Spring Boot application.yml добавьте следующую конфигурацию, где имя — это имя серверной части, одно и то же имя можно настроить для нескольких экземпляров службы, а балансировка нагрузки при опросе используется по умолчанию.

netty:
  clients:
    - name: server
      host: localhost
      port: 6001
    - name: server
      host: localhost
      port: 6001

скопировать код

Вызывающий сервис должен написать интерфейс и написать аннотацию @RpcClient на интерфейсе Имя должно быть именем поставщика услуг, и требуется rpcClz, который является классом поставщика услуг.

@RpcClient(name = "server", rpcClz = "com.forezp.localrpcserver.api.Greeting")
public interface IGreeting {

    String sayHello(String name);
}
скопировать код
@Autowired
IGreeting greeting;

Object object = greeting.sayHello( "hi" );
 
скопировать код

свяжитесь со мной

Если у вас есть какие-либо вопросы и предложения, пожалуйста, свяжитесь со мной, моя электронная почтаmiles02@163.com

Функции, которые были реализованы

  • rpc (реализация синхронных и асинхронных вызовов)
  • Балансировка нагрузки
  • Изоляция пула потоков интерфейса
  • Доступ к Эврике
  • отслеживание ссылок доступа
  • Мониторинг доступа
  • Доступ к почтовому ящику тревог
  • Оптимизация производительности rpc (требуется непрерывная оптимизация)

План на будущее

  • Доступ к различным сериализациям, чтобы их можно было настроить
  • Пользовательский протокол, индекс трассировки указывать не нужно
  • Консул доступа
  • Поддержка весенней загрузки 2.0 Spring Cloud F