跳到主要内容

快速入门

这是一个最简单的RSocket Broker参考样例: 服务调用方(requester)向Broker发起服务调用请求,Broker将请求转发给服务提供者(Responder), 最后Broker将Responder的处理结果再返回给requester。 流程图如下:

RSocket Call Sequence

代码仓库地址https://github.com/alibaba-rsocket-broker/rsocket-broker-simple-example 你可以点击Use this template绿色按钮创建你自己的应用。

服务接口设计

RSocket的服务接口是基于Reactive语义的,你只需要将API的返回值设置为Mono和Flux就可以。 关于Mono和Flux的介绍,请参考 Reactor Core Reference

public interface UserService {

Mono<User> findById(Integer id);

Flux<User> findVipUser();

}

服务接口实现

服务接口的实现类就是一个简单的Spring Bean,我们只需要添加对应的@RSocketService Annotation标明该服务为RSocket服务即可。

@Service
@RSocketService(serviceInterface = UserService.class)
public class UserServiceImpl implements UserService {
private final Faker faker = new Faker();

@Override
public Mono<User> findById(Integer id) {
return Mono.just(randomUser(id));
}

private User randomUser(@Nullable Integer id) {
User user = new User();
user.setId(id == null ? new Random().nextInt() : id);
user.setNick(faker.name().name());
user.setPhone(faker.phoneNumber().cellPhone());
user.setEmail(faker.internet().emailAddress());
return user;
}

}

user-service-spring-boot-starter

为了方便其他Spring Boot应用调用RSocket服务,我们这里创建一个服务对应的Spring Boot Starter。 创建一个Spring Configuration,来生成UserService调用的代理Bean,代码如下:

@Configuration(proxyBeanMethods = false)
public class UserServicesAutoConfiguration {
@Bean
public UserService userService(UpstreamManager upstreamManager) {
return RSocketRemoteServiceBuilder
.client(UserService.class)
.upstreamManager(upstreamManager)
.build();
}
}

RSocket服务远程调用

在服务消费者方,只需要引入user-service-spring-boot-starter依赖,然后在Controller或者其他Bean中直接UserService对应的代理bean即可,如下:

@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;

@GetMapping("/{id}")
public Mono<User> user(@PathVariable Integer id) {
return userService.findById(id);
}

}

测试

最后我们只需要在应用消费者端发起对应的请求就可以,如通过一个HTTP请求来触发对后端RSocket的服务调用:

curl http://localhost:8181/user/1