WebFlux的WebClient框架

本文介绍了响应式编程在后台服务调用中的应用,通过一个WebFlux的小型示例,展示了如何使用WebClient进行服务转发。在程序启动时,动态代理类被注入,当请求到达时,通过代理解析URL和参数,WebClient据此发起请求并根据情况返回响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

响应式编程,对于普通前端而言其实没有太大变化,该等多长时间还是要等多长时间,更多的是用在后台服务间的调用上。

先写个小demo

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ApiServer {
    String value() default "";
}
@ApiServer("http://localhost:8080/user")
public interface IUserApi {
    @GetMapping("/")
    Flux<ClientUser> getAllUser();
    @GetMapping("/{id}")
    Mono<ClientUser> getUserById(@PathVariable String id);
    @DeleteMapping("/{id}")
    Mono<Void> deleteUserById();
    @PostMapping("/")
    Mono<ClientUser> createUser(@RequestBody Mono<ClientUser> user);
}
@RestController
public class TestController {
    @Autowired
    IUserApi userApi;

    @GetMapping("/")
    public void test(){
        Flux<ClientUser> users = userApi.getAllUser();
        users.subscribe(System.out::println);
    }
}

就是做转发到服务端。

当然url调用方式有很多,接下来上完整框架

/**
 * 方法调用信息类
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class MethodInfo {
    private String url;
    private HttpMethod method;
    private Map<String , Object> params;
    private Mono body;
    private Class<?> bodyElementType;
    //返回是flux还是mono
    private boolean returnFlux;
    //返回对象类型
    private Class<?> returnElementType;
}
/**
 * 服务器信息类
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ServerInfo {
    private String url;
}
/**
 * 代理类接口
 */
public interface ProxyCreator {
    //创建代理类
    Object createProxy(Class<?> type);
}
/**
 * rest请求调用handler
 */
public interface RestHandler {
    //初始化服务器信息
    void init(ServerInfo serverInfo);
    //调用rest请求,返回结果
    Object invokeRest(MethodInfo methodInfo);
}
/**
 * 使用jdk动态代理实现代理类
 */
&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值