<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)

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


    網站導航:
     
    主站蜘蛛池模板: 人人狠狠综合久久亚洲高清| 91福利免费体验区观看区| 成年女人免费视频播放体验区 | 久久久久国产精品免费看| 日韩亚洲变态另类中文| 中文字幕不卡免费视频| 亚洲免费观看视频| 久久成人免费播放网站| 亚洲首页在线观看| 日本阿v免费费视频完整版| 国产AV旡码专区亚洲AV苍井空| 精品国产免费一区二区| 窝窝影视午夜看片免费| 亚洲AV无一区二区三区久久| 精品免费久久久久久久| 亚洲AV永久无码天堂影院| 亚洲成a人片在线播放| 91在线免费视频| 亚洲综合激情另类小说区| 两个人的视频高清在线观看免费| 亚洲精品9999久久久久无码| 国产偷窥女洗浴在线观看亚洲 | 4399好看日本在线电影免费| 亚洲一区二区三区高清在线观看 | 日韩精品视频免费在线观看| 人妻巨大乳hd免费看| 亚洲成A∨人片在线观看不卡| 嘿嘿嘿视频免费网站在线观看| 日日摸日日碰夜夜爽亚洲| 精品久久香蕉国产线看观看亚洲| 69成人免费视频| 国产黄在线播放免费观看| 亚洲图片中文字幕| 免费一级毛片在播放视频| 免费国产污网站在线观看15| 亚洲AV无码精品国产成人| 亚洲成a人片在线观看无码专区| 日韩欧美一区二区三区免费观看 | 国产精品无码永久免费888| 亚洲视频一区在线| 亚洲国产精品丝袜在线观看|