마이크로 서비스 원자로-Guice 프레임 워크 0.12.2 릴리스, 게이트웨이 모드 지원 웹 소켓

원자로-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 ().) 반환; 
}

추천

출처www.oschina.net/news/107494/react-guice-0-12-2-released