<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
    ringboot3+springcloudstream4.x配置集成

    springcloudstream3.X 后逐漸淘汰了 @input @output @EnableBinding 這些注解 到4.X后這個注解都沒有了,全部轉向function 方式(關于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:
    # 應用服務 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=/
    #配置使用默認的binder的配置連接信息,如果配置多個binders,可以設置默認的值,也可以在生產者和消息者binding 中設置
    spring.cloud.stream.default-binder=ciicbinder

    spring.cloud.function.definition=mybinder1;mybinder
    spring.cloud.stream.bindings.mybinder.producer.requiredGroups=test_topic
    #如果應用中只有一個消息中間件需要配置,設置一個默認完事,項目中如果有兩種(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是對應的exchange)
    spring.cloud.stream.bindings.mybinder-in-0.destination=zzz_test
    spring.cloud.stream.bindings.mybinder-in-0.content-type=application/json
    #消息者組(如果Rabbit對應topic會zzz_test.test1_topic創建topic)
    spring.cloud.stream.bindings.mybinder-in-0.group=test1_topic
    #消息者應用啟動后自動監聽消息(默認值:true)
    spring.cloud.stream.bindings.mybinder-in-0.consumer.auto-startup=true
    #以下是關于Rabbit私有特色設置
    #設置死信隊列(默認值true)
    spring.cloud.stream.rabbit.bindings.mybinder.consumer.auto-bind-dlq=true
    #手動ACK提交消息
    spring.cloud.stream.rabbit.bindings.mybinder.consumer.acknowledge-mode=MANUAL


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

    生產者和消息者配置:
    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 {
    // 如果手動發送消息,要把代碼注釋掉,這是fuction形式自動發消息 mybinder1 名稱要和funtion名稱一致。
    /* @Bean
    public Supplier<Message<String>> mybinder1(){
    return ()->{
    try {
    Thread.sleep(2000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    int s=0;
    System.out.println("生產者 產生消息-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的話 開發工具比如idea2019 版本最高支持JDK13 可以統一編譯水平到17,然后把POM編譯設置到17,maven插件版升級到支持17 


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

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


    網站導航:
     
    主站蜘蛛池模板: 久久久国产精品亚洲一区| 久久精品国产亚洲AV麻豆不卡| 亚洲欧洲国产成人精品| 久久久久免费看成人影片| 亚洲真人无码永久在线| 男人天堂免费视频| 久久精品国产亚洲AV网站| 久久精品无码专区免费青青| 亚洲精品高清久久| 国产v精品成人免费视频400条| 亚洲一区免费视频| 日韩视频免费在线| 日本一区二区三区在线视频观看免费| 四虎国产精品免费久久影院| 成年大片免费高清在线看黄| 亚洲熟妇无码八AV在线播放| 免费毛片a线观看| 亚洲理论精品午夜电影| 无码一区二区三区免费视频| 麻豆亚洲AV成人无码久久精品 | 亚洲无码一区二区三区| 国产高清免费在线| 2022免费国产精品福利在线| 亚洲av无码一区二区三区网站| 永久免费在线观看视频| 亚洲中文字幕久久精品无码VA| 亚洲精品456播放| 久久国产免费一区| 亚洲夂夂婷婷色拍WW47| 亚洲无码日韩精品第一页| 无码AV片在线观看免费| 亚洲精品一二三区| 91麻豆精品国产自产在线观看亚洲| 日韩免费电影网站| 亚洲欧美日韩中文字幕在线一区| 免费A级毛片无码A| 真实国产乱子伦精品免费| 亚洲av无码偷拍在线观看| 亚洲熟妇无码AV在线播放| 最近中文字幕mv免费高清视频7| 欧亚一级毛片免费看|