Git Product home page Git Product logo

nexus's Introduction

Nexus

介绍

Nexus是一个简单的rpc框架,基本实现rpc的主要功能,目前须结合spring使用,其中使用Netty为通信框架,使用kryo作为默认序列化协议,通过spi来选配序列化协议、 负载均衡器、注册中心;

快速开始

  • 将项目拉到本地,并安装到本地maven仓库;
  • 创建一个空的springboot项目;
  • pom引入依赖;
<dependency>
  <groupId>com.mao.nexus</groupId>
  <artifactId>nexus-spring-boot-start</artifactId>
  <version>1.0.0</version>
</dependency>
  • 在yml配置相关内容
nexus:
  service-name: server-example
  port: 1234
  registry:
    protocol: consul
  cluster:
    load-balance: random
  max-connection: 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("收到了,%s,我的回答是:够了!~我是%d", var, port);
  }

  @Override
  public User getUser(String name) {
    return userList.stream().filter(user -> user.getName().equals(name)).findAny().orElse(null);
  }
}
  • 客户端controller;
@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中; 文章:https://blog.csdn.net/stephenCAT1/article/details/130705690

nexus's People

Contributors

stephenfaust avatar

Stargazers

 avatar watermelon avatar  avatar  avatar  avatar  avatar  avatar Kevins avatar su7-gaga avatar Yigehaoren8848 avatar F-x avatar Vicente Armstrong avatar MijazzChan avatar  avatar DiscoverTruth avatar chiefass avatar Amen8 avatar Jian avatar  avatar  avatar  avatar Meta Luo avatar  avatar in1t avatar  avatar  avatar Pup avatar  avatar  avatar  avatar 孙明志 avatar Ryan Bai avatar  avatar  avatar Lorenz Liu avatar 91api avatar Nanomoa avatar Lujia Jin avatar  avatar SongZihui avatar jiangsiyi avatar test_init avatar  avatar ZHANG, Hao avatar YIN MA avatar  avatar 8xmx8 avatar zhulinkai avatar huan.wang avatar  avatar Eric avatar wsh avatar vanker-x avatar Biangbangbing avatar  avatar Moon avatar  avatar maozi avatar SharplyQ avatar  avatar rookie-ljh avatar test_push avatar Elin avatar liuziting avatar CYJiang avatar wozuidiao avatar  avatar  avatar Junbo Yang avatar 東雲研究所 avatar  avatar  avatar ethan chan avatar  avatar assembly avatar  avatar Jhin avatar 老实的切图Man avatar 大一学生 avatar dlimeng avatar  avatar  avatar  avatar Maoter avatar mooshooter avatar NANN avatar  avatar MY avatar 厦门飞骥科技有限公司 avatar Ma Shiqing avatar BugKing avatar  avatar  avatar  avatar  avatar Letsmain avatar Hey avatar 厦门飞骥科技有限公司 avatar 大山猫 avatar hello go avatar

Watchers

 avatar assembly avatar GitForGood avatar 東雲研究所 avatar  avatar Handsome avatar AiChatD avatar john river avatar ethan chan avatar LedArx avatar Jhin avatar Amelia Earhart avatar  avatar

nexus's Issues

服务端和客户端代码生成中的方法参数类型问题

在使用 nexus-go 项目进行 ProtoBuf 文件的代码生成过程中,我注意到在生成的服务端和客户端代码中,方法的参数类型设置存在一些问题。

具体地,当我使用以下命令生成服务端代码:

protoc  --nexus_out=gen-ser=true:. --go_out=. test.proto

生成的 TestQueryService 结构体的方法 GetUserByIdListUserByIds 参数类型是指针类型(*UserReq, *ListUserReq),返回类型也是指针类型(*User, *UserResp)。

func (s *TestQueryService) GetUserById(args *UserReq, reply *User) error {
	// define your service ...
	return nil
}

func (s *TestQueryService) ListUserByIds(args *ListUserReq, reply *UserResp) error {
	// define your service ...
	return nil
}

然而,在生成的客户端代码中,这两个方法的返回类型却是非指针类型(User, UserResp),这导致在使用过程中会出现不一致的情况。

func (sc *TestQueryServiceClient) GetUserById(args *UserReq, reply *User) error {
	return sc.client.Invoke(args, "TestQueryService", "GetUserById", reply)
}

func (sc *TestQueryServiceClient) ListUserByIds(args *ListUserReq, reply *UserResp) error {
	return sc.client.Invoke(args, "TestQueryService", "ListUserByIds", reply)
}

个人建议在代码生成过程中,统一参数和返回值的类型,以提供更好的使用体验。谢谢!

关于 Nacos 支持的问题

你好,

我是一名开发者,最近在评估使用 Nexus 作为我们的 RPC 框架。在查看项目的代码和文档后,我注意到目前 Nexus 支持通过 SPI 来选配序列化协议、负载均衡器、以及注册中心。

我们的系统正在使用 Nacos 作为服务发现和配置管理的解决方案,目前我们使用的是 Nacos 的最新版本。因此,我想询问以下几个问题:

  1. Nexus 是否有计划支持 Nacos 作为注册中心?如果有,能否提供预期的时间线?
  2. 如果 Nexus 支持 Nacos,那么会支持哪个版本的 Nacos?是否会持续支持 Nacos 的新版本?
  3. 在 Nexus 官方支持 Nacos 之前,有没有推荐的方式来集成 Nacos 和 Nexus?

感谢你的时间和帮助,期待回复!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.