一个响应式编程库,因为 之前有了解过响应式编程 , 所以简单复习一下,也加深下印象
官网介绍说这是为quarkus而出的库,利用一个模版引擎库
类似于OpenFeign一样的组件,可以通过接口方式进行远程资源访问
先于Project Reactor进行一个对比
在multiny的官方文档中,介绍了Uni和Multi的区别,这里记录一下:
在对Uni和Multi的进行介绍时,开篇就提到了: 业务中很少由我们自己来创建一个Uni或者Multi,而是我们使用的客户端返回了一个Uni或者Multi对象
换句话说, 通常我们写的代码是Processor的一环,而数据的源头及消费者则是由框架在处理的
在Web资源入口中,通过Template对应资源
也可以使用@Location进行定位; 比如:
@Path("store")
public class LoginResource {
@Inject
Template store;
// @Inject
// @Location("store")
// Template store;
@GET
@Produces(MediaType.TEXT_HTML)
public TemplateInstance store(@QueryParam("storeName") String storeName) {
return store.data("stores", Store.mockList());
}
}
<table>
<thead>
<tr>
<th>门店id</th>
<th>门店名称</th>
<th>门店经纬度</th>
</tr>
</thead>
<tbody>
{#for store in stores}
<tr>
<td>{store.storeId}</td>
<td>{store.storeName}</td>
<td>{store.longitude} , {store.latitude}</td>
</tr>
{/for}
</tbody>
</table>
使用@RegisterRestClient将资源声明为一个资源接口
quarkus的期望是将可变的行为放到配置文件中, 在configKey中设置一个配置的key(不设置则需要使用全类名,太长了) , 然后在配置文件中进行设置
@RegisterRestClient(configKey = "baidu-client")
public interface BaiduClient {
@GET
@Path("geocoder")
CompletionStage<String> geocoder(@QueryParam("output") String output, @QueryParam("location") String location);
}
在application.properties中对该资源进行配置,比如:
quarkus.rest-client.baidu-client.url=http://api.map.baidu.com
quarkus.rest-client.baidu-client.scope=javax.inject.Singleton
注解不是@Inject了; 而是@RestClient,响应式中需要加@Blocking注解以正常运行
@RestClient
BaiduClient baiduClient;
@GET
@Path("geocoder")
@Blocking
public Uni<String> geocoder(@QueryParam("location") String location) {
return Uni.createFrom().completionStage(baiduClient.geocoder("json", location));
}
现在前端页面的渲染、web接口、远程资源访问、数据库访问 就全部打通了,再逐步的深入使用
目前使用quarkus感觉良好,启动一下项目,然后就可以浪了, 举两个例子:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。