{"id":15014297,"url":"https://github.com/fengjiachun/jupiter","last_synced_at":"2025-05-15T03:05:09.946Z","repository":{"id":46782757,"uuid":"44820217","full_name":"fengjiachun/Jupiter","owner":"fengjiachun","description":"Jupiter是一款性能非常不错的, 轻量级的分布式服务框架","archived":false,"fork":false,"pushed_at":"2023-06-20T16:35:47.000Z","size":9839,"stargazers_count":1508,"open_issues_count":16,"forks_count":561,"subscribers_count":162,"default_branch":"master","last_synced_at":"2025-05-15T03:04:47.311Z","etag":null,"topics":["cluster","distributed-systems","hessian","high-performance","java","jupiter","kryo","microservice","netty","netty4","nio","protostuff","rpc","rpc-framework","service-consumer","service-discovery","service-provider","service-registry","socket","spring"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fengjiachun.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2015-10-23T15:04:14.000Z","updated_at":"2025-05-02T20:59:09.000Z","dependencies_parsed_at":"2022-08-22T03:00:46.762Z","dependency_job_id":"b69dedfd-d0bb-4d60-9339-53e4245fbfcf","html_url":"https://github.com/fengjiachun/Jupiter","commit_stats":null,"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fengjiachun%2FJupiter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fengjiachun%2FJupiter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fengjiachun%2FJupiter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fengjiachun%2FJupiter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fengjiachun","download_url":"https://codeload.github.com/fengjiachun/Jupiter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254264765,"owners_count":22041793,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cluster","distributed-systems","hessian","high-performance","java","jupiter","kryo","microservice","netty","netty4","nio","protostuff","rpc","rpc-framework","service-consumer","service-discovery","service-provider","service-registry","socket","spring"],"created_at":"2024-09-24T19:45:26.127Z","updated_at":"2025-05-15T03:05:09.894Z","avatar_url":"https://github.com/fengjiachun.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](/LICENSE)\n[![Maven Central](https://img.shields.io/maven-central/v/org.jupiter-rpc/jupiter.svg?label=Maven%20Central)](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.jupiter-rpc%22%20AND%20jupiter)\n[![Build Status](https://travis-ci.org/fengjiachun/Jupiter.svg?branch=master)](https://travis-ci.org/fengjiachun/Jupiter)\n[![Code Quality: Java](https://img.shields.io/lgtm/grade/java/g/fengjiachun/Jupiter.svg?logo=lgtm\u0026logoWidth=18)](https://lgtm.com/projects/g/fengjiachun/Jupiter/context:java)\n[![Total Alerts](https://img.shields.io/lgtm/alerts/g/fengjiachun/Jupiter.svg?logo=lgtm\u0026logoWidth=18)](https://lgtm.com/projects/g/fengjiachun/Jupiter/alerts)\n\n#### Jupiter:\n- Jupiter 是一款性能非常不错的, 轻量级的分布式服务框架\n\n#### Jupiter Architecture:\n\n           ═ ═ ═▷ init         ─ ─ ─ ▷ async       ──────▶ sync\n    ----------------------------------------------------------------------------------------\n\n                                ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─\n                                           ┌ ─ ─ ─ ┐ │\n               ─ ─ ─ ─ ─ ─ ─ ─ ─│ Registry  Monitor ───────────────────────────┐\n              │                            └ ─ ─ ─ ┘ │                         │\n                                └ ─ ─△─ ─ ─ ─ ─△─ ─ ─                          ▼\n              │                                                           ┌ ─ ─ ─ ─\n            Notify                   ║         ║                            Telnet │\n              │         ═ ═ ═ ═ ═ ═ ═           ═ ═ ═ ═ ═ ═ ═ ═ ═         └ ─ ─ ─ ─\n                       ║                                         ║             ▲\n              │    Subscribe                                  Register         │\n                       ║                                         ║             │\n              │  ┌ ─ ─ ─ ─ ─                          ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─    │\n                            │─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ▷           ┌ ─ ─ ─ ┐ │   │\n              └ ▷│ Consumer           Invoke          │ Provider  Monitor ─────┘\n                            │────────────────────────▶           └ ─ ─ ─ ┘ │\n                 └ ─ ─ ─ ─ ─                          └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─\n\n    ---------------------------------------------------------------------------------------\n\n\n#### [RELEASE-NOTES](/docs/release-notes.md)\n\n#### 性能:\n- 小数据包请求(不带业务)在四核刀片服务器上可达到17w+的tps, 详情见 [Benchmark](https://github.com/fengjiachun/Jupiter/wiki/Benchmark)\n- [参考: 多个 RPC 框架的 Benchmark 见这里](https://github.com/hank-whu/rpc-benchmark)\n\n#### 文档:\n- [High performance RPC with netty](/docs/static_files/high_performance_rpc_with_netty.md)\n- [High performance RPC with netty.pdf](/docs/static_files/high_performance_rpc_with_netty.pdf)\n- [Wiki](https://github.com/fengjiachun/Jupiter/wiki)\n- [其他文档](https://github.com/fengjiachun/doc/tree/master/jupiter)\n- [发展路线](https://github.com/fengjiachun/Jupiter/wiki/RoadMap)\n\n#### 一次 RPC 调用:\n\n\u003cimg src=\"docs/static_files/jupiter-rpc.png\" width=\"1600\"/\u003e\n\n\u003cp align=\"right\"\u003e感谢 @远墨 提供的图\u003c/p\u003e\n\n#### 快速开始:\n\n##### 工程依赖:\n+ JDK1.8 或更高版本\n+ 依赖管理工具: Maven3.x 版本\n\n##### [最新版本OSS下载](https://oss.sonatype.org/#nexus-search;quick~org.jupiter-rpc)\n##### [最新版本Maven中心仓库下载](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.jupiter-rpc%22%20AND%20jupiter)\n##### Maven依赖:\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.jupiter-rpc\u003c/groupId\u003e\n    \u003cartifactId\u003ejupiter-all\u003c/artifactId\u003e\n    \u003cversion\u003e${jupiter.version}\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n##### 简单调用示例:\n###### 1. 创建服务接口:\n\n```java\n@ServiceProvider(group = \"test\", name = \"serviceTest\")\npublic interface ServiceTest {\n    String sayHelloString();\n}\n\n@ServiceProvider:\n    - 建议每个服务接口通过此注解来指定服务信息, 如不希望业务代码对jupiter依赖也可以不使用此注解而手动去设置服务信息\n        + group: 服务组别(选填, 默认组别为'Jupiter')\n        + name: 服务名称(选填, 默认名称为接口全限定名称)\n```\n\n###### 2. 创建服务实现:\n\n```java\n@ServiceProviderImpl(version = \"1.0.0\")\npublic class ServiceTestImpl implements ServiceTest {\n\n    @Override\n    public String sayHelloString() {\n        return \"Hello jupiter\";\n    }\n}\n\n@ServiceProviderImpl:\n    - 建议每个服务实现通过此注解来指定服务版本信息, 如不希望业务代码对jupiter依赖也可以不使用此注解而手动去设置版本信息\n        + version: 服务版本号(选填, 默认版本号为'1.0.0')\n```\n\n###### 3. 启动注册中心:\n\n###### - 选择1: 使用 jupiter 默认的注册中心:\n\n```java\npublic class HelloJupiterRegistryServer {\n\n    public static void main(String[] args) {\n        // 注册中心\n        RegistryServer registryServer = RegistryServer.Default.createRegistryServer(20001, 1);\n        try {\n            registryServer.startRegistryServer();\n        } catch (InterruptedException e) {\n            e.printStackTrace();\n        }\n    }\n}\n```\n\n###### - 选择2: 使用 [zookeeper](https://zookeeper.apache.org/doc/trunk/zookeeperStarted.html) 作为注册中心:\n\n```xml\n默认注册中心只建议在测试环境使用, 线上建议使用 zookeeper 实现\n\n// 设置使用 zookeeper 作为注册中心\nJServer server = new DefaultServer(RegistryService.RegistryType.ZOOKEEPER)\nJClient client = new DefaultClient(RegistryService.RegistryType.ZOOKEEPER)\n\n在 server 和 client 中配置 jupiter-registry-zookeeper 依赖(jupiter-all 包含 jupiter-registry-zookeeper)\n\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.jupiter-rpc\u003c/groupId\u003e\n    \u003cartifactId\u003ejupiter-registry-zookeeper\u003c/artifactId\u003e\n    \u003cversion\u003e${jupiter.version}\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n###### 4. 启动服务提供(Server):\n\n```java\npublic class HelloJupiterServer {\n\n    public static void main(String[] args) throws Exception {\n        JServer server = new DefaultServer().withAcceptor(new JNettyTcpAcceptor(18090));\n        // provider\n        ServiceTestImpl service = new ServiceTestImpl();\n        // 本地注册\n        ServiceWrapper provider = server.serviceRegistry()\n                .provider(service)\n                .register();\n        // 连接注册中心\n        server.connectToRegistryServer(\"127.0.0.1:20001\");\n        // 向注册中心发布服务\n        server.publish(provider);\n        // 启动server\n        server.start();\n    }\n}\n```\n\n###### 5. 启动服务消费者(Client)\n\n```java\npublic class HelloJupiterClient {\n\n    public static void main(String[] args) {\n        JClient client = new DefaultClient().withConnector(new JNettyTcpConnector());\n        // 连接RegistryServer\n        client.connectToRegistryServer(\"127.0.0.1:20001\");\n        // 自动管理可用连接\n        JConnector.ConnectionWatcher watcher = client.watchConnections(ServiceTest.class);\n        // 等待连接可用\n        if (!watcher.waitForAvailable(3000)) {\n            throw new ConnectFailedException();\n        }\n\n        ServiceTest service = ProxyFactory.factory(ServiceTest.class)\n                .version(\"1.0.0\")\n                .client(client)\n                .newProxyInstance();\n\n        service.sayHelloString();\n    }\n}\n```\n\n[Server/Client 代码示例](/jupiter-example/src/main/java/org/jupiter/example/round)\n\n###### 新特性\n\nv1.3 新增 `InvokeType.AUTO`, 当你的接口返回值是一个 `CompletableFuture` 或者它的子类将自动适配为异步调用, 否则为同步调用\n[具体 demo 请参考这里](/jupiter-example/src/main/java/org/jupiter/example/round/AutoJupiterClient.java)\n\n##### 结合Spring使用示例:\n###### 1. [Server端配置](/jupiter-example/src/main/resources/spring-provider.xml):\n\n```xml\n\u003cjupiter:server id=\"jupiterServer\" registryType=\"default\"\u003e \u003c!-- registryType=\"zookeeper\" 代表使用zk作为注册中心 --\u003e\n    \u003cjupiter:property registryServerAddresses=\"127.0.0.1:20001\" /\u003e\n\u003c/jupiter:server\u003e\n\n\u003c!-- provider --\u003e\n\u003cbean id=\"serviceTest\" class=\"org.jupiter.example.ServiceTestImpl\" /\u003e\n\n\u003cjupiter:provider id=\"serviceTestProvider\" server=\"jupiterServer\" providerImpl=\"serviceTest\"\u003e\n    \u003cjupiter:property weight=\"100\"/\u003e\n\u003c/jupiter:provider\u003e\n```\n\n###### 2. [Client 端配置](/jupiter-example/src/main/resources/spring-consumer.xml):\n\n```xml\n\u003cjupiter:client id=\"jupiterClient\" registryType=\"default\"\u003e \u003c!-- registryType=\"zookeeper\" 代表使用zk作为注册中心 --\u003e\n    \u003cjupiter:property registryServerAddresses=\"127.0.0.1:20001\" /\u003e\n\u003c/jupiter:client\u003e\n\n\u003c!-- consumer --\u003e\n\u003cjupiter:consumer id=\"serviceTest\" client=\"jupiterClient\" interfaceClass=\"org.jupiter.example.ServiceTest\"\u003e\n    \u003cjupiter:property version=\"1.0.0.daily\" /\u003e\n    \u003cjupiter:property serializerType=\"proto_stuff\" /\u003e\n    \u003cjupiter:property loadBalancerType=\"round_robin\" /\u003e\n    \u003cjupiter:property timeoutMillis=\"3000\" /\u003e\n    \u003cjupiter:property clusterStrategy=\"fail_over\" /\u003e\n    \u003cjupiter:property failoverRetries=\"2\" /\u003e\n    \u003cjupiter:methodSpecials\u003e\n        \u003c!-- 方法的单独配置 --\u003e\n        \u003cjupiter:methodSpecial methodName=\"sayHello\" timeoutMillis=\"5000\" clusterStrategy=\"fail_fast\" /\u003e\n    \u003c/jupiter:methodSpecials\u003e\n\u003c/jupiter:consumer\u003e\n```\n\n[SpringServer/SpringClient 代码示例](/jupiter-example/src/main/java/org/jupiter/example/spring)\n\n##### [更多示例代码](/jupiter-example/src/main/java/org/jupiter/example)\n\n\n#### 其他\n- qq交流群: 397633380\n- 邮件交流: jiachun_fjc@163.com\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffengjiachun%2Fjupiter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffengjiachun%2Fjupiter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffengjiachun%2Fjupiter/lists"}