원자로-guice 마이크로 반응기 구글 Guice 프레임 워크를 기반으로하는 서비스와 원자로-그물코입니다
라우팅 및 주석 의존성 주입을 통해 자동 구성, 또는 자신의 성능을 Guice와 원자로를 기반으로하므로 부팅 과정에서 반사의 사용은, 구성을 완료 할 수 있기 때문에, 게이트웨이 서비스로 그를 사용합니다.
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. 반응기 - guice 등장
받는다는
<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. 응용 프로그램을 만듭니다
정적 무효 메인 공개 (문자열 []에 인수) IOException가이 {발생 //로드 배치 = 속성 속성 새로운 새로운 속성 (); Properties.load로 (새로운 새로운 기능 또는 FileInputStream (인수 [0])); 문자열 = Properties.getProperty 호스트 ( "서버. "); 호스트 포트 = Integer.valueOf (Properties.getProperty (INT"server.port을 ")); 서비스 시작 // ReactorGuiceServer.create () .bind (호스트, 포트) .createInjector이 ( // 쉽게 @names를 얻기 위해 사용하기를 구성 바인더 -> Names.bindProperties (바인더, 속성) // 데이터베이스에 새 MyBatisModule () { @Override //自定义的配置 보호 무효 초기화 () { (JdbcHelper.MySQL) 설치; bindDataSourceProviderType (HikariDataSourceProvider.class); bindTransactionFactoryType (JdbcTransactionFactory.class); addMapperClasses ( "com.doopp.gauss.app.dao"); // addInterceptorClass (PageInterceptor.class); } } // 레디 스 새로운 RedisModule (), 새로운 ApplicationModule () ) //配置JSON处理类 .setHttpMessageConverter (새 새 MyGsonHttpMessageConverter ()) // 여러 컨트롤러 및 서비스 패키지 이름을 구성 할 수 있습니다 스캔을 자동으로 설정 .basePackages ( "com.doopp.gauss.app을", ...) // 현재 만 URI를 통해 여과 지원 여러번 AddFilter를 .addFilter ( "/"AppFilter.class) // 에러 정보 출력 (true로) .printError .launch (); }
3. 컨트롤러 만들기
컨트롤러 예
@Controller @Path ( "/ API / 관리자") 공용 클래스 ExampleController { @GET @Path ( "/ JSON") @Produces ({MediaType.APPLICATION_JSON}) 공공 모노 <지도 <문자열, 문자열 >> JSON () { 반환 모노 년 그냥 (새의 HashMap <문자열, 문자열> ()) .MAP (m -> { m.put ( "안녕하세요", "다섯 소녀"); 반환 m; }); } @GET @Path ( "/ JPEG") @Produces ({ "이미지 / JPEG"}) 공공 모노 <ByteBuf> JPEG는 () { ) (HttpClient.create를 반환 갔지 () .uri ( "https://static.cnbetacdn.com/article/2019/0402/6398390c491f650.jpg") .responseContent () .aggregate () .MAP (ByteBuf :: 유지); } }
웹 소켓
@Path ( "/ kreactor / WS") @Singleton 공용 클래스 WsTestHandle는 AbstractWebSocketServerHandle {연장 @Override 공개 무효 접속 (채널 채널) { 에서 System.out.println (channel.id ()); super.connected (채널); } @Override 공개 무효 onTextMessage (TextWebSocketFrame 프레임 채널 채널) { 에서 System.out.println (frame.text ()); super.onTextMessage (프레임 채널); } }
API 게이트웨이 모드
ReactorGuiceServer.create () .bind (호스트, 포트) .setApiGatewayDispatcher (새 MyApiGatewayDispatcher ()) .addFilter ( "/", TestFilter.class) .launch ();
혼합 API 게이트웨이 모델
ReactorGuiceServer.create () .bind (호스트, 포트) .createInjector (모듈 1, 모듈 2, ...) .setHttpMessageConverter (새 JacksonHttpMessageConverter ()) .setApiGatewayDispatcher (새 MyApiGatewayDispatcher ()) .handlePackages ( "com.doopp.reactor.guice .test ") .addFilter ("/ "TestFilter.class) .launch ();
양식 및 파일 업로드
// 서버 @POST @Path ( "/ 테스트 / 후 빈") 공공 모노 <사용자> testPostBean (@BeanParam 사용자 사용자 @FileParam (값 = "이미지"경로 = "C : \\ 사용자 \\ koocyton \ \ 바탕 화면 ") [] 파일 파일) { Mono.just (사용자)을 반환; } // 클라이언트 테스트 @Test 공공 무효의 testFileUpload () { 문자열 HHE = HttpClient.create () .post () .uri ( "http://127.0.0.1:8083/kreactor/test/post-bean") .sendForm ((REQ, 양식) -> form.multipart (참) .attr ( "ID", "123123121312312") .attr ( "계정", "계정") .attr ( "암호", "비밀번호" .file ( "이미지", 새로운 파일 ( "C : \\ 사용자 \\ koocyton \\ 그림 \\ cloud.jpg")) .file ( "이미지", 새로운 파일 ( "C : \\ 사용자 \\ koocyton \ \ 사진 \\ st.jpg ")) ) .responseSingle ((고해상도 컨텐츠) -> 내용) .MAP (byteBuf -> byteBuf.toString (CharsetUtil.UTF_8)) .block (); 에서 System.out.println (HHE); }
protobuf
@GET @Path ( "/ 테스트 / protobuf") @Produces ( "애플리케이션 / X-protobuf") 공중 모노 <바이트 []> testProtobuf () { Hello.Builder 빌더 Hello.newBuilder = (); builder.setId (123); builder.setName ( "우이"); builder.setEmail ( "[email protected]"); Mono.just (builder.build ()를 toByteArray ().) 반환; }