📜  离子启动服务器 (1)

📅  最后修改于: 2023-12-03 15:27:19.592000             🧑  作者: Mango

离子启动服务器

离子启动服务器(Ion Server)是由阿里云和 Apache Dubbo 社区合作开源的高性能 RPC 服务框架。它基于 RPC 协议提供服务治理、负载均衡、容错、流量控制、安全防范等一系列服务治理能力。

为什么选择离子启动服务器?
  1. 高性能:采用多层 UDP 传输协议,相较于基于 TCP 传输的传统 RPC 框架,可以大幅提升 QPS 和响应速度。

  2. 易用性:提供零侵入式的服务注册和发现能力,统一管理服务,使服务治理变得更加方便。

  3. 易扩展性:支持动态扩展服务提供者,提高系统可用性和可扩展性。

  4. 生态完备:与阿里云多项服务和开源项目深度融合,支持 Dubbo 生态和 Spring 生态。

如何使用离子启动服务器?

离子启动服务器的使用分为两个步骤:服务提供者和服务消费者。

服务提供者

服务提供者需要经过注册和发布展示两个过程。其中,注册将该服务提供者关联到注册中心,发布生产者服务的协议和端口。

# 注册服务提供者

## 1. 在 pom.xml 中添加依赖:

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-dependencies-zookeeper</artifactId>
    <version>2.7.3</version>
    <type>pom</type>
    <scope>provided</scope>
</dependency>

## 2. 使用 @Service 注解进行服务提供者注册:

@Service
public class UserServiceImpl implements UserService {
    // ...
}

# 发布服务提供者

## 1. 在 application.properties 中配置:

dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.application.name=provider
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

## 2. 使用 Dubbo 提供的 API 进行服务发布:

@Service
public class UserServiceImpl implements UserService {
    @Override
    public User getUser() {
        return new User(1L, "张三");
    }
}

@Service
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

服务消费者

服务消费者需要经过对消费者接口类使用 Reference 注解进行远程调用。其中,Reference 注解使用 URL 指针指向注册中心内的生产者接口。

## 注册服务消费者

## 1. 在 pom.xml 中添加依赖:

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-maven-plugin</artifactId>
    <version>2.7.3</version>
</dependency>

## 2. 在 application.properties 中配置:

dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.application.name=consumer
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

## 3. 在客户端直接使用 Reference 注解调用服务:

@RestController
public class UserController {
    @Reference
    private UserService userService;

    @GetMapping("/user/{id}")
    public User findUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }
}