内容简介:Reactor-guice 是一个基于 Google Guice 和 Reactor-netty 的 Reactor 微服务框架通过注解自动配置路由和依赖注入,或用他作为你的网关服,因仅在启动过程中使用反射来完善配置,所以他的性能是基于 Guice 和 Reactor。
Reactor-guice 是一个基于 Google Guice 和 Reactor-netty 的 Reactor 微服务框架
通过注解自动配置路由和依赖注入,或用他作为你的网关服,因仅在启动过程中使用反射来完善配置,所以他的性能是基于 Guice 和 Reactor。
0.0.3 注册注解 @GET @POST @PUT @DELETE @Products @PATH 支持 Websocket 可作为静态文件服 支持对 URI 做 Filter 处理 0.0.5 静态文件目录后默认输出 index.html 支持自选模板引擎,自带Freemark 和 Thymeleaf 处理类 支持自定义Json引擎,自带 Gson 和jackson 的处理类 添加 ModelMap, 注入到 Controlle 的方法,用户模板的变量代入 可以上传文件了 0.0.8 可以 POST 数组 通过返回 Mono.just("redirect:/...") 实现重定向 支持 API 网关模式 修复头信息错误的 BUG 可选返回跨域头信息 0.10 支持输出 Protobuf BeanParm 可以支持 Form ,Json 或 Protobuf ,将上传的数据自动组织成对象 上传的文件接受类型 byte[] , UploadFile, File 上传文件可以自动保存到指定的目录 0.11 增加自动扫描 Controlle 类和 Service 类 通过扫描完成路由配置和依赖注入,不同手动做额外配置 0.12.1 静态文件的读取塞入到异步中去处理 这个版本是一个稳定的版本 0.12.2 优化 Jar 内读取文件的变量 简化 websocket 的接口 网关模式增加 websocket
1. 引入 reactor-guice
maven
<dependency> <groupId>com.doopp</groupId> <artifactId>reactor-guice</artifactId> <version>0.12.2</version> </dependency>
gradle
compile 'com.doopp:reactor-guice:0.12.2'
2. 创建应用
public static void main(String[] args) throws IOException { // 载入配置 Properties properties = new Properties(); properties.load(new FileInputStream(args[0])); String host = properties.getProperty("server.host"); int port = Integer.valueOf(properties.getProperty("server.port")); // 启动服务 ReactorGuiceServer.create() .bind(host, port) .createInjector( // 方便使用 @Names 来获取配置 binder -> Names.bindProperties(binder, properties), // 数据库 new MyBatisModule() { @Override protected void initialize() { install(JdbcHelper.MySQL); bindDataSourceProviderType(HikariDataSourceProvider.class); bindTransactionFactoryType(JdbcTransactionFactory.class); addMapperClasses("com.doopp.gauss.app.dao"); // addInterceptorClass(PageInterceptor.class); } }, // Redis new RedisModule(), // 自定义的配置 new ApplicationModule() ) // 配置 Json 处理类 .setHttpMessageConverter(new MyGsonHttpMessageConverter()) // 设定自动扫描 Controller 和 Service 的包名,可以配置多个 .basePackages("com.doopp.gauss.app", ...) // 目前仅支持通过 URI 来过滤,可以多次 addFilter .addFilter("/", AppFilter.class) // 错误信息输出 .printError(true) .launch(); }
3. 创建 Controller
Controller Example
@Controller @Path("/api/admin") public class ExampleController { @GET @Path("/json") @Produces({MediaType.APPLICATION_JSON}) public Mono<Map<String, String>> json() { return Mono .just(new HashMap<String, String>()) .map(m -> { m.put("hi", "five girl"); return m; }); } @GET @Path("/jpeg") @Produces({"image/jpeg"}) public Mono<ByteBuf> jpeg() { return HttpClient.create() .get() .uri("https://static.cnbetacdn.com/article/2019/0402/6398390c491f650.jpg") .responseContent() .aggregate() .map(ByteBuf::retain); } }
WebSocket
@Path("/kreactor/ws") @Singleton public class WsTestHandle extends AbstractWebSocketServerHandle { @Override public void connected(Channel channel) { System.out.println(channel.id()); super.connected(channel); } @Override public void onTextMessage(TextWebSocketFrame frame, Channel channel) { System.out.println(frame.text()); super.onTextMessage(frame, channel); } }
Api Gateway 模式
ReactorGuiceServer.create() .bind(host, port) .setApiGatewayDispatcher(new MyApiGatewayDispatcher()) .addFilter("/", TestFilter.class) .launch();
混合的 Api Gateway Model
ReactorGuiceServer.create() .bind(host, port) .createInjector(module1, module2, ...) .setHttpMessageConverter(new JacksonHttpMessageConverter()) .setApiGatewayDispatcher(new MyApiGatewayDispatcher()) .handlePackages("com.doopp.reactor.guice.test") .addFilter("/", TestFilter.class) .launch();
表单和文件上传
// Server @POST @Path("/test/post-bean") public Mono<User> testPostBean(@BeanParam User user, @FileParam(value="image", path = "C:\\Users\\koocyton\\Desktop") File[] file) { return Mono.just(user); } // Client Test @Test public void testFileUpload() { String hhe = HttpClient.create() .post() .uri("http://127.0.0.1:8083/kreactor/test/post-bean") .sendForm((req, form) -> form.multipart(true) .attr("id", "123123121312312") .attr("account", "account") .attr("password", "password") .attr("name", "name") .file("image", new File("C:\\Users\\koocyton\\Pictures\\cloud.jpg")) .file("image", new File("C:\\Users\\koocyton\\Pictures\\st.jpg")) ) .responseSingle((res, content) -> content) .map(byteBuf -> byteBuf.toString(CharsetUtil.UTF_8)) .block(); System.out.println(hhe); }
Protobuf
@GET @Path("/test/protobuf") @Produces("application/x-protobuf") public Mono<byte[]> testProtobuf() { Hello.Builder builder = Hello.newBuilder(); builder.setId(123); builder.setName("wuyi"); builder.setEmail("wuyi@doopp.com"); return Mono.just(builder.build().toByteArray()); }
以上所述就是小编给大家介绍的《微服务 Reactor-Guice 框架 0.12.2发布,网关模式支持 Websocket》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- YoMo v0.7.0 发布,实时边缘计算网关和开发框架
- Martian-gateway 1.0.2 发布,Martian 框架网关组件
- 微服务 Reactor-Guice 框架 0.12.2发布,网关模式支持 Websocket
- Soul 网关发布 2.2.0,让高性能网关变得如此简单!
- 远行API网关(200428)
- zuul网关实现解析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
我看电商2(双色)
黄若 / 电子工业出版社 / 2016-6 / 39.00元
《我看电商2》是行业畅销书《我看电商》的续集。 《我看电商》自出版以来,连续印刷14 次,受到业界人士和广大读者的高度好评。《我看电商2》承续作者一贯的风格,以行业观察、经验分享为出发点,重点分析了过去一年中国电商界的最新动态与趋势,包括双11点评、京东关闭拍拍、上市公司私有化等。 电子商务是我国近年来发展最快的新兴行业之一,作者作为这个行业的长老级领军人物,善于思考,长于实操。《我看......一起来看看 《我看电商2(双色)》 这本书的介绍吧!