# Jupiter
**Repository Path**: thomas9696/Jupiter
## Basic Information
- **Project Name**: Jupiter
- **Description**: Jupiter是一款性能非常不错的, 轻量级的分布式服务框架
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2020-08-07
- **Last Updated**: 2024-06-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[](https://github.com/fengjiachun/Jupiter/blob/master/LICENSE)
[](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.jupiter-rpc%22%20AND%20jupiter)
[](https://travis-ci.org/fengjiachun/Jupiter)
#### Jupiter:
- Jupiter是一款性能非常不错的, 轻量级的分布式服务框架
#### Jupiter Architecture:
═ ═ ═▷ init ─ ─ ─ ▷ async ──────▶ sync
----------------------------------------------------------------------------------------
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
┌ ─ ─ ─ ┐ │
─ ─ ─ ─ ─ ─ ─ ─ ─│ Registry Monitor ───────────────────────────┐
│ └ ─ ─ ─ ┘ │ │
└ ─ ─△─ ─ ─ ─ ─△─ ─ ─ ▼
│ ┌ ─ ─ ─ ─
Notify ║ ║ Telnet │
│ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ └ ─ ─ ─ ─
║ ║ ▲
│ Subscribe Register │
║ ║ │
│ ┌ ─ ─ ─ ─ ─ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ▷ ┌ ─ ─ ─ ┐ │ │
└ ▷│ Consumer Invoke │ Provider Monitor ─────┘
│────────────────────────▶ └ ─ ─ ─ ┘ │
└ ─ ─ ─ ─ ─ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
---------------------------------------------------------------------------------------
#### 性能:
- 小数据包请求(不带业务)在四核刀片服务器上可达到17w+的tps, 详情见 [Benchmark](https://github.com/fengjiachun/Jupiter/wiki/Benchmark)
#### 文档:
- [Wiki](https://github.com/fengjiachun/Jupiter/wiki)
#### 快速入门:
##### 工程依赖:
+ JDK1.7或更高版本
+ 依赖管理工具: Maven3.x版本
##### [最新版本OSS下载](https://oss.sonatype.org/#nexus-search;quick~org.jupiter-rpc)
##### [最新版本Maven中心仓库下载](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.jupiter-rpc%22%20AND%20jupiter)
##### Maven依赖:
```xml
1.2.11
org.jupiter-rpc
jupiter-all
${jupiter.version}
```
##### 简单调用示例:
###### 1. 创建服务接口:
```java
@ServiceProvider(group = "test", name = "serviceTest")
public interface ServiceTest {
String sayHelloString();
}
@ServiceProvider:
- 建议每个服务接口通过此注解来指定服务信息, 如不希望业务代码对jupiter依赖也可以不使用此注解而手动去设置服务信息
+ group: 服务组别(选填, 默认组别为'Jupiter')
+ name: 服务名称(选填, 默认名称为接口全限定名称)
```
###### 2. 创建服务实现:
```java
@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默认的注册中心:
```java
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](https://zookeeper.apache.org/doc/trunk/zookeeperStarted.html)作为注册中心:
```xml
默认注册中心只建议在测试环境使用, 线上建议使用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):
```java
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)
```java
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代码示例](https://github.com/fengjiachun/Jupiter/tree/master/jupiter-example/src/main/java/org/jupiter/example/round)
##### 结合Spring使用示例:
###### 1. [Server端配置](https://github.com/fengjiachun/Jupiter/blob/master/jupiter-example/src/main/resources/spring-provider.xml):
```xml
```
###### 2. [Client端配置](https://github.com/fengjiachun/Jupiter/blob/master/jupiter-example/src/main/resources/spring-consumer.xml):
```xml
```
[SpringServer/SpringClient代码示例](https://github.com/fengjiachun/Jupiter/tree/master/jupiter-example/src/main/java/org/jupiter/example/spring)
##### [更多示例代码](https://github.com/fengjiachun/Jupiter/tree/master/jupiter-example/src/main/java/org/jupiter/example)
#### 其他
- qq交流群: 397633380
- 邮件交流: jiachun_fjc@163.com