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

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

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

    posts - 22, comments - 32, trackbacks - 0, articles - 73
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
    ringboot3+springcloudstream4.x配置集成

    springcloudstream3.X 后逐漸淘汰了 @input @output @EnableBinding 這些注解 到4.X后這個注解都沒有了,全部轉(zhuǎn)向function 方式(關(guān)于function可以了解下)

    組件版本:springboot 3、 springcloud 2022.0.0、springcloudstream4.0.0

    maven依賴:
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
    </dependency>
    application.properties:
    # 應(yīng)用服務(wù) WEB 訪問端口
    server.port=8080
    #配置stream的binder,這里可以更換其它的消息中間件連接配置信息(ciicbinder 名稱)
    spring.cloud.stream.binders.ciicbinder.type=rabbit
    spring.cloud.stream.binders.ciicbinder.environment.spring.rabbitmq.host=10.82.26.126
    spring.cloud.stream.binders.ciicbinder.environment.spring.rabbitmq.port=8094
    spring.cloud.stream.binders.ciicbinder.environment.spring.rabbitmq.username=admin
    spring.cloud.stream.binders.ciicbinder.environment.spring.rabbitmq.password=admin
    spring.cloud.stream.binders.ciicbinder.environment.spring.rabbitmq.virtual-host=/
    #配置使用默認(rèn)的binder的配置連接信息,如果配置多個binders,可以設(shè)置默認(rèn)的值,也可以在生產(chǎn)者和消息者binding 中設(shè)置
    spring.cloud.stream.default-binder=ciicbinder

    spring.cloud.function.definition=mybinder1;mybinder
    spring.cloud.stream.bindings.mybinder.producer.requiredGroups=test_topic
    #如果應(yīng)用中只有一個消息中間件需要配置,設(shè)置一個默認(rèn)完事,項目中如果有兩種(Rabbit,kafka)可以指定用那個
    #spring.cloud.stream.bindings.mybinder.binder=ciicbinder
    spring.cloud.stream.bindings.mybinder1-out-0.destination=zzz_test
    spring.cloud.stream.bindings.mybinder1-out-0.content-type=application/json


    #下邊是Consumer配置
    #mybinder是自定義名稱-in-0 是固定寫法 zzz_test 這個是通道名稱(如果是Rabbit是對應(yīng)的exchange)
    spring.cloud.stream.bindings.mybinder-in-0.destination=zzz_test
    spring.cloud.stream.bindings.mybinder-in-0.content-type=application/json
    #消息者組(如果Rabbit對應(yīng)topic會zzz_test.test1_topic創(chuàng)建topic)
    spring.cloud.stream.bindings.mybinder-in-0.group=test1_topic
    #消息者應(yīng)用啟動后自動監(jiān)聽消息(默認(rèn)值:true)
    spring.cloud.stream.bindings.mybinder-in-0.consumer.auto-startup=true
    #以下是關(guān)于Rabbit私有特色設(shè)置
    #設(shè)置死信隊列(默認(rèn)值true)
    spring.cloud.stream.rabbit.bindings.mybinder.consumer.auto-bind-dlq=true
    #手動ACK提交消息
    spring.cloud.stream.rabbit.bindings.mybinder.consumer.acknowledge-mode=MANUAL


    解釋下其中 mybinder1 是自定義名稱,如果希望手動向生產(chǎn)者mybinder1 不要使用自定義成 mybinder1-out-0 形式(這是fuction形式),fuction 大多場景是流式方式,企業(yè)線應(yīng)用使用的不多。

    生產(chǎn)者和消息者配置:
    package com.example.demo.demos.web;

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.messaging.Message;
    import org.springframework.messaging.support.MessageBuilder;
    import org.springframework.stereotype.Component;

    import java.util.function.Consumer;
    import java.util.function.Supplier;


    @Component
    @Configuration
    public class ConmerMQ {
    // 如果手動發(fā)送消息,要把代碼注釋掉,這是fuction形式自動發(fā)消息 mybinder1 名稱要和funtion名稱一致。
    /* @Bean
    public Supplier<Message<String>> mybinder1(){
    return ()->{
    try {
    Thread.sleep(2000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    int s=0;
    System.out.println("生產(chǎn)者 產(chǎn)生消息-data="+"dfafdafd"+(s++));
    return MessageBuilder.withPayload("message product -mybinder1="+"dfafdafd").build();
    };
    }*/

    @Bean
    public Consumer<Message<String>> mybinder() {
    return data -> {
    String ss = data.getPayload();
    System.out.println("================consumer message=" + ss);
    };
    }
    }
    測試代碼:

     @Autowired
    private StreamBridge streamBridge;

    // http://127.0.0.1:8080/hello?name=lisi
    @RequestMapping("/hello")
    @ResponseBody
    public String hello(@RequestParam(name = "name", defaultValue = "unknown user") String name) {
    JSONObject jsonObject=new JSONObject();
    jsonObject.put("name",name);
    //bindingName:如果是propertis中一到致
    //spring.cloud.stream.bindings.mybinder1-out-0.destination=zzz_test 如果是fuction形式要配置mybinder1-out-0
    //spring.cloud.stream.bindings.mybinder1.destination=zzz_test 如果不是fuction形式要配置 mybinder1
    boolean flag=streamBridge.send("mybinder1-out-0",jsonObject.toJSONString());
    return "flag=" + flag;
    }
    備注組件升級后都基本JDK17 工程是多model的話 開發(fā)工具比如idea2019 版本最高支持JDK13 可以統(tǒng)一編譯水平到17,然后把POM編譯設(shè)置到17,maven插件版升級到支持17 


    在把工程各model language level 設(shè)置成 project default(如果idea 版低的話下拉框中選擇不到17)

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 久久不见久久见免费视频7| 亚洲精品无码永久在线观看| 一个人看的免费观看日本视频www| 亚洲网站免费观看| 国产午夜亚洲精品国产成人小说| 青青青国产在线观看免费网站| 中文字幕一区二区三区免费视频| 亚洲精品亚洲人成在线| 亚洲小说区图片区| 亚洲va中文字幕无码久久| 亚洲国产精品丝袜在线观看| 国产精品免费观看久久| 100部毛片免费全部播放完整| 你好老叔电影观看免费| 羞羞视频在线免费观看| 亚洲欧洲无卡二区视頻| 亚洲va乱码一区二区三区| 久久精品国产亚洲AV电影| 亚洲AV永久精品爱情岛论坛| 国产亚洲美日韩AV中文字幕无码成人| 国产免费av片在线无码免费看| 色窝窝免费一区二区三区| ww在线观视频免费观看| 久久久久成人精品免费播放动漫| 中文字幕免费播放| 中国一级毛片视频免费看| 永久免费无码日韩视频| 全黄A免费一级毛片| 男人扒开添女人下部免费视频| 白白色免费在线视频| 小说专区亚洲春色校园| 337P日本欧洲亚洲大胆精品| 亚洲精华液一二三产区| 亚洲一日韩欧美中文字幕在线| 亚洲天堂2017无码中文| 亚洲第一男人天堂| 亚洲色少妇熟女11p| 亚洲av日韩av永久在线观看| 亚洲av无码专区亚洲av不卡| 久久亚洲色WWW成人欧美| 亚洲aⅴ无码专区在线观看春色|