Jupiter是一款性能非常不错的, 轻量级的分布式服务框架

网友投稿 732 2022-11-04

Jupiter是一款性能非常不错的, 轻量级的分布式服务框架

Jupiter是一款性能非常不错的, 轻量级的分布式服务框架

Jupiter:

Jupiter 是一款性能非常不错的, 轻量级的分布式服务框架

Jupiter Architecture:

═ ═ ═▷ init ─ ─ ─ ▷ async ──────▶ sync---------------------------------------------------------------------------------------- ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┌ ─ ─ ─ ┐ │ ─ ─ ─ ─ ─ ─ ─ ─ ─│ Registry Monitor ───────────────────────────┐ │ └ ─ ─ ─ ┘ │ │ └ ─ ─-─ ─ ─ ─ ─-─ ─ ─ ▼ │ ┌ ─ ─ ─ ─ Notify ║ ║ Telnet │ │ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ └ ─ ─ ─ ─ ║ ║ ▲ │ Subscribe Register │ ║ ║ │ │ ┌ ─ ─ ─ ─ ─ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ▷ ┌ ─ ─ ─ ┐ │ │ └ ▷│ Consumer Invoke │ Provider Monitor ─────┘ │────────────────────────▶ └ ─ ─ ─ ┘ │ └ ─ ─ ─ ─ ─ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─---------------------------------------------------------------------------------------

RELEASE-NOTES

性能:

数据包请求(不带业务)在四核刀片服务器上可达到17w+的tps, 详情见 Benchmark参考: 多个 RPC 框架的 Benchmark 见这里

文档:

High performance RPC with nettyHigh performance RPC with netty.pdfWiki其他文档发展路线

一次 RPC 调用:

感谢 @远墨 提供的图

快速开始:

工程依赖:

JDK1.8 或更高版本依赖管理工具: Maven3.x 版本

最新版本OSS-

最新版本Maven中心仓库-

Maven依赖:

org.jupiter-rpc jupiter-all ${jupiter.version}

简单调用示例:

1. 创建服务接口:

@ServiceProvider(group = "test", name = "serviceTest")public interface ServiceTest { String sayHelloString();}@ServiceProvider: - 建议每个服务接口通过此注解来指定服务信息, 如不希望业务代码对jupiter依赖也可以不使用此注解而手动去设置服务信息 + group: 服务组别(选填, 默认组别为'Jupiter') + name: 服务名称(选填, 默认名称为接口全限定名称)

2. 创建服务实现:

@ServiceProviderImpl(version = "1.0.0")public class ServiceTestImpl implements ServiceTest { @Override public String sayHelloString() { return "Hello jupiter"; }}@ServiceProviderImpl: - 建议每个服务实现通过此注解来指定服务版本信息, 如不希望业务代码对jupiter依赖也可以不使用此注解而手动去设置版本信息 + version: 服务版本号(选填, 默认版本号为'1.0.0')

3. 启动注册中心:

- 选择1: 使用 jupiter 默认的注册中心:

public class HelloJupiterRegistryServer { public static void main(String[] args) { // 注册中心 RegistryServer registryServer = RegistryServer.Default.createRegistryServer(20001, 1); try { registryServer.startRegistryServer(); } catch (InterruptedException e) { e.printStackTrace(); } }}

- 选择2: 使用 zookeeper 作为注册中心:

默认注册中心只建议在测试环境使用, 线上建议使用 zookeeper 实现// 设置使用 zookeeper 作为注册中心JServer server = new DefaultServer(RegistryService.RegistryType.ZOOKEEPER)JClient client = new DefaultClient(RegistryService.RegistryType.ZOOKEEPER)在 server 和 client 中配置 jupiter-registry-zookeeper 依赖(jupiter-all 包含 jupiter-registry-zookeeper) org.jupiter-rpc jupiter-registry-zookeeper ${jupiter.version}

4. 启动服务提供(Server):

public class HelloJupiterServer { public static void main(String[] args) throws Exception { JServer server = new DefaultServer().withAcceptor(new JNettyTcpAcceptor(18090)); // provider ServiceTestImpl service = new ServiceTestImpl(); // 本地注册 ServiceWrapper provider = server.serviceRegistry() .provider(service) .register(); // 连接注册中心 server.connectToRegistryServer("127.0.0.1:20001"); // 向注册中心发布服务 server.publish(provider); // 启动server server.start(); }}

5. 启动服务消费者(Client)

public class HelloJupiterClient { public static void main(String[] args) { JClient client = new DefaultClient().withConnector(new JNettyTcpConnector()); // 连接RegistryServer client.connectToRegistryServer("127.0.0.1:20001"); // 自动管理可用连接 JConnector.ConnectionWatcher watcher = client.watchConnections(ServiceTest.class); // 等待连接可用 if (!watcher.waitForAvailable(3000)) { throw new ConnectFailedException(); } ServiceTest service = ProxyFactory.factory(ServiceTest.class) .version("1.0.0") .client(client) .newProxyInstance(); service.sayHelloString(); }}

Server/Client 代码示例

新特性

v1.3 新增 InvokeType.AUTO, 当你的接口返回值是一个 CompletableFuture 或者它的子类将自动适配为异步调用, 否则为同步调用 具体 demo 请参考这里

结合Spring使用示例:

1. Server端配置:

2. Client 端配置:

SpringServer/SpringClient 代码示例

更多示例代码

其他

qq交流群: 397633380邮件交流: jiachun_fjc@163.com

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Schema 一个轻量级、简洁和响应式前端UI框架,利用LESS构建
下一篇:synchronized底层实现原理
相关文章

 发表评论

暂时没有评论,来抢沙发吧~