<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    EVEN DRIVEN - SPRING CLOUD STREAM 3.x - Functional Programming Model

    SPRING CLOUD STREAM 3.x 版本時,之前的一些編程模式,如@Enablebindding,@StreamListenner等注釋被廢棄了,這是由于一些框架的代碼必需由用戶編寫,如配置框架用的Input MessageChannel,Output  MessageChannel,連接MessageHandler與MessageChannel等,被視為不必要的動作。為了簡化用戶代碼,于是推出Functional Programming Model。

    引入了新名詞:Supplier、Function與Consumer。實際上這幾個類可視為Adapter,如果之前已經有存在的Service類,且方法名為各種各樣,可以重新包裝成Supplier、Function與Consumer,并在固定的方法名:apply/get/accept中調用Service的方法。

    Supplier

    當在配置文件中注入此類型的Bean,并在spring.cloud.stream.function.definition加入此Bean的名稱,SPRING CLOUD STREAM就會幫你生成一個Output  MessageChannel,并連接上此Bean,后續只需要在BINDDING中加入對應的Destination Name,即可向BROKER發消息了。

    Consumer

    當在配置文件中注入此類型的Bean,并在spring.cloud.stream.function.definition加入此Bean的名稱,SPRING CLOUD STREAM就會幫你生成一個Input  MessageChannel,并連接上此Bean,后續只需要在BINDDING中加入對應的Destination Name,即可收到BROKER推送關于此Destination的消息了。

    Function

    當在配置文件中注入此類型的Bean,并在spring.cloud.stream.function.definition加入此Bean的名稱,SPRING CLOUD STREAM就會幫你生成一個Input和Output  MessageChannel,并連接上此Bean,后續只需要在BINDDING中分別對Input和Output MessageChannel加入對應的Destination Name1/Name2,即可收到BROKER推送關于此Destination的消息,也可以向BROKER發消息了。

    與SPRING INTEGRATION的整合

    如果要對消息進行復雜處理,如拆分消息、聚合消息、IF ELSE消息等,就要借助SPRING INTEGRATION了。

    @Bean
        public IntegrationFlow upperCaseFlow(LoanService loanService) {
            return IntegrationFlows
                        //turn this IntegrationFlow as a gateway, here is a Function interface 
                        
    //with loadCheckerFunction as bean name
                        .from(LoadCheckerFunction.class, gateway -> gateway.beanName("loadCheckerFunction"))
                        .handle(loanService, "check")
                        .logAndReply(LoggingHandler.Level.WARN);
        }

        public interface LoadCheckerFunction extends Function<Loan, Loan>{

        }

    IntegrationFlows.from(Class<?> serviceInterface)是可以將本IntegrationFlow包裝成serviceInterface的實現類,如果調用此接口,最終會返回IntegrationFlow最后一個步驟的實體,如果這個serviceInterface是Function的話,剛好和SPRING CLOUD STREAM對接上。

    后續在spring.cloud.stream.function.definition加入此Bean的名稱loadCheckerFunction,SPRING CLOUD STREAM就會幫你生成一個Input和Output  MessageChannel,并連接上此Bean,再在BINDDING中分別對Input和Output MessageChannel加入對應的Destination Name1/Name2,即可收到BROKER推送關于此Destination的消息,也可以向BROKER發消息。

    application.yaml
    # This setting can increase or decrease the rate of message production (1000 = 1s)
    # spring.cloud.stream.poller.fixed-delay=1000

    # This setting can control which function method in our code will be triggered if there are multiple
    # spring.cloud.function.definition=supplyLoan

    # Give the autogenerated binding a friendlier name

    spring:
       application:
          name: loan-check-rabbit
       banner:
          location: classpath:/banner-rabbit.txt
       cloud:
          stream:
             function.definition: loadCheckerFunction
             #BindingProperties
             bindings:
                loadCheckerFunction-in-0:
                   destination: queue.pretty.log.messages
                   binder: local_rabbit
                loadCheckerFunction-out-0:
                   destination: queue.pretty.approved.messages
                   binder: local_rabbit
             #BinderProperties
             binders:
                local_rabbit:
                   type: rabbit
                   environment:
                      spring:
                         rabbitmq:
                            host: 10.80.27.69
                            port: 5672
                            username: guest
                            password: guest
                            virtual-host: my-virtual-host

    Reference

    https://spring.io/blog/2019/10/25/spring-cloud-stream-and-spring-integration

    posted on 2021-11-10 15:10 paulwong 閱讀(400) 評論(0)  編輯  收藏 所屬分類: SPRING INTERGRATIONSPRING CLOUDEVEN DRIVEN ARCHITECT

    主站蜘蛛池模板: 亚洲人成在线影院| 免费无遮挡无遮羞在线看| 在线免费观看a级片| 另类专区另类专区亚洲| 亚洲AV永久精品爱情岛论坛| 欧洲乱码伦视频免费| 人妻仑乱A级毛片免费看| 亚洲高清国产拍精品26U| 夜夜嘿视频免费看| 久久一区二区免费播放| 亚洲中字慕日产2020| 亚洲日本va午夜中文字幕久久| 免费女人高潮流视频在线观看 | 91香蕉成人免费网站| 亚洲精品色在线网站| 亚洲电影一区二区| 免费一级e一片在线播放| 亚欧免费无码aⅴ在线观看| 亚洲日本中文字幕天天更新| 日韩亚洲人成在线综合日本| 午夜一级毛片免费视频| 久久久久久久99精品免费观看| 亚洲av无码专区国产不乱码| 亚洲色欲色欲综合网站| 亚洲国产成人爱av在线播放| 国产大片免费网站不卡美女| 毛片基地看看成人免费| 亚洲欧美自偷自拍另类视| 亚洲国产精品久久66| 亚洲日本中文字幕一区二区三区| 无码人妻久久一区二区三区免费丨| 巨胸喷奶水www永久免费| 亚洲av色香蕉一区二区三区蜜桃| 亚洲精品视频免费看| 亚洲一区二区三区在线观看精品中文 | 99精品视频在线观看免费专区| 免费视频成人国产精品网站| 亚洲av日韩av综合| 亚洲精品福利视频| 国产亚洲精午夜久久久久久| 国产日产成人免费视频在线观看|