Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

GohnStudio/Jupiter

Open more actions menu
 
 

Repository files navigation

License Maven Central Build Status Code Quality: Java Total Alerts

Jupiter:

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

Jupiter Architecture:

       ═ ═ ═▷ init         ─ ─ ─ ▷ async       ──────▶ sync
----------------------------------------------------------------------------------------

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

---------------------------------------------------------------------------------------

性能:

文档:

一次RPC调用:

感谢 @远墨 提供的图

快速开始:

工程依赖:
  • JDK1.7或更高版本
  • 依赖管理工具: Maven3.x版本
Maven依赖:
<dependency>
    <groupId>org.jupiter-rpc</groupId>
    <artifactId>jupiter-all</artifactId>
    <version>${jupiter.version}</version>
</dependency>
简单调用示例:
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)

<dependency>
    <groupId>org.jupiter-rpc</groupId>
    <artifactId>jupiter-registry-zookeeper</artifactId>
    <version>${jupiter.version}</version>
</dependency>
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代码示例

结合Spring使用示例:
<jupiter:server id="jupiterServer" registryType="default"> <!-- registryType="zookeeper" 代表使用zk作为注册中心 -->
    <jupiter:property registryServerAddresses="127.0.0.1:20001" />
</jupiter:server>

<!-- provider -->
<bean id="serviceTest" class="org.jupiter.example.ServiceTestImpl" />

<jupiter:provider id="serviceTestProvider" server="jupiterServer" providerImpl="serviceTest">
    <jupiter:property weight="100"/>
</jupiter:provider>
<jupiter:client id="jupiterClient" registryType="default"> <!-- registryType="zookeeper" 代表使用zk作为注册中心 -->
    <jupiter:property registryServerAddresses="127.0.0.1:20001" />
</jupiter:client>

<!-- consumer -->
<jupiter:consumer id="serviceTest" client="jupiterClient" interfaceClass="org.jupiter.example.ServiceTest">
    <jupiter:property version="1.0.0.daily" />
    <jupiter:property serializerType="proto_stuff" />
    <jupiter:property loadBalancerType="round_robin" />
    <jupiter:property timeoutMillis="3000" />
    <jupiter:property clusterStrategy="fail_over" />
    <jupiter:property failoverRetries="2" />
    <jupiter:methodSpecials>
        <!-- 方法的单独配置 -->
        <jupiter:methodSpecial methodName="sayHello" timeoutMillis="5000" clusterStrategy="fail_fast" />
    </jupiter:methodSpecials>
</jupiter:consumer>

SpringServer/SpringClient代码示例

其他

About

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

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Java 100.0%
Morty Proxy This is a proxified and sanitized view of the page, visit original site.