Skip to content

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

License

Notifications You must be signed in to change notification settings

feixy/Jupiter

Repository files navigation

LicenseMaven CentralBuild Status

Jupiter:

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

Jupiter Architecture:

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

性能:

  • 小数据包请求(不带业务)在四核刀片服务器上可达到17w+的tps, 详情见 Benchmark

文档:

快速入门:

工程依赖:
  • JDK1.7或更高版本
  • 依赖管理工具: Maven3.x版本
Maven依赖:
<properties> <jupiter.version>1.2.11</jupiter.version> </properties> <dependency> <groupId>org.jupiter-rpc</groupId> <artifactId>jupiter-all</artifactId> <version>${jupiter.version}</version> </dependency>
简单调用示例:
1. 创建服务接口:
@ServiceProvider(group = "test", name = "serviceTest") publicinterfaceServiceTest{StringsayHelloString()} @ServiceProvider: - 建议每个服务接口通过此注解来指定服务信息, 如不希望业务代码对jupiter依赖也可以不使用此注解而手动去设置服务信息 + group: 服务组别(选填, 默认组别为'Jupiter') + name: 服务名称(选填, 默认名称为接口全限定名称)
2. 创建服务实现:
@ServiceProviderImpl(version = "1.0.0") publicclassServiceTestImplimplementsServiceTest{@OverridepublicStringsayHelloString(){return"Hello jupiter"} } @ServiceProviderImpl: - 建议每个服务实现通过此注解来指定服务版本信息, 如不希望业务代码对jupiter依赖也可以不使用此注解而手动去设置版本信息 + version: 服务版本号(选填, 默认版本号为'1.0.0')
3. 启动注册中心:
- 选择1: 使用jupiter默认的注册中心:
publicclassHelloJupiterRegistryServer{publicstaticvoidmain(String[] args){// 注册中心RegistryServerregistryServer = RegistryServer.Default.createRegistryServer(20001, 1); try{registryServer.startRegistryServer()} catch (InterruptedExceptione){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) <dependency> <groupId>org.jupiter-rpc</groupId> <artifactId>jupiter-registry-zookeeper</artifactId> <version>${jupiter.version}</version> </dependency>
4. 启动服务提供(Server):
publicclassHelloJupiterServer{publicstaticvoidmain(String[] args) throwsException{JServerserver = newDefaultServer().withAcceptor(newJNettyTcpAcceptor(18090)); // providerServiceTestImplservice = newServiceTestImpl(); // 本地注册ServiceWrapperprovider = server.serviceRegistry() .provider(service) .register(); // 连接注册中心server.connectToRegistryServer("127.0.0.1:20001"); // 向注册中心发布服务server.publish(provider); // 启动serverserver.start()} }
5. 启动服务消费者(Client)
publicclassHelloJupiterClient{publicstaticvoidmain(String[] args){JClientclient = newDefaultClient().withConnector(newJNettyTcpConnector()); // 连接RegistryServerclient.connectToRegistryServer("127.0.0.1:20001"); // 自动管理可用连接JConnector.ConnectionWatcherwatcher = client.watchConnections(ServiceTest.class); // 等待连接可用if (!watcher.waitForAvailable(3000)){thrownewConnectFailedException()} ServiceTestservice = ProxyFactory.factory(ServiceTest.class) .version("1.0.0") .client(client) .newProxyInstance(); service.sayHelloString()} }

Server/Client代码示例

结合Spring使用示例:
<jupiter:serverid="jupiterServer"registryType="default"> <!-- registryType="zookeeper" 代表使用zk作为注册中心 --> <jupiter:propertyregistryServerAddresses="127.0.0.1:20001" /> </jupiter:server> <!-- provider --> <beanid="serviceTest"class="org.jupiter.example.ServiceTestImpl" /> <jupiter:providerid="serviceTestProvider"server="jupiterServer"providerImpl="serviceTest"> <jupiter:propertyweight="100"/> </jupiter:provider>
<jupiter:clientid="jupiterClient"registryType="default"> <!-- registryType="zookeeper" 代表使用zk作为注册中心 --> <jupiter:propertyregistryServerAddresses="127.0.0.1:20001" /> </jupiter:client> <!-- consumer --> <jupiter:consumerid="serviceTest"client="jupiterClient"interfaceClass="org.jupiter.example.ServiceTest"> <jupiter:propertyversion="1.0.0.daily" /> <jupiter:propertyserializerType="proto_stuff" /> <jupiter:propertyloadBalancerType="round_robin" /> <jupiter:propertytimeoutMillis="3000" /> <jupiter:propertyclusterStrategy="fail_over" /> <jupiter:propertyfailoverRetries="2" /> <jupiter:methodSpecials> <!-- 方法的单独配置 --> <jupiter:methodSpecialmethodName="sayHello"timeoutMillis="5000"clusterStrategy="fail_fast" /> </jupiter:methodSpecials> </jupiter:consumer>

SpringServer/SpringClient代码示例

其他

About

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

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java100.0%