<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)航:
     
    主站蜘蛛池模板: 中文在线观看永久免费| 久久亚洲日韩精品一区二区三区| 成人毛片免费网站| 91免费资源网站入口| 免费AA片少妇人AA片直播| 在免费jizzjizz在线播| 亚洲国产一成人久久精品| 亚洲午夜成人精品电影在线观看 | a毛片在线免费观看| 三级黄色免费观看| 成人无码区免费A∨直播| www一区二区www免费| 女人隐私秘视频黄www免费| 91福利免费网站在线观看| 免费一区二区无码东京热| 鲁丝片一区二区三区免费 | 亚洲免费视频观看| 亚洲精品视频在线播放| 亚洲免费在线观看视频| 国产精品亚洲片在线va| 涩涩色中文综合亚洲| 亚洲精品乱码久久久久蜜桃| 精品在线观看免费| 国产黄在线观看免费观看不卡 | a免费毛片在线播放| 两个人日本WWW免费版| 久久久久久成人毛片免费看| 亚洲毛片在线免费观看| 操美女视频免费网站| 亚洲国产成人VA在线观看| 亚洲国产婷婷六月丁香| 亚洲毛片免费观看| 亚洲国产精品日韩av不卡在线| 美女被免费网站视频在线| 国产午夜无码片免费| 久久精品毛片免费观看| 香蕉高清免费永久在线视频| 亚洲av再在线观看| 久久精品亚洲综合专区| 亚洲一级毛片视频| 污网站在线免费观看|