• SpringCloud Stream @EnableBinding注解过时


    @EnableBinding源码中明确声明

    该注解在从3.1版本开始被弃用,推荐我们使用函数编程的方式

    我将给出一个生产者和消费者的使用案例:

    生产者案例:

    yml配置:

    server:
      port: 8801
    
    spring:
      application:
        name: cloud-stream-provider
      rabbitmq:
        host: 192.168.220.101
        port: 5672
        username: guest
        password: guest
      cloud:
        stream:
          bindings: #服务的整合处理
            myChannel-out-0: #这个名字是一个通道的名字
              destination: studyExchange #表示要使用Exchange名称定义
              contentType: application/json #设置消息类型,本次为json,文本则设置为“text/plain”
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    注意bingdings 集合中的key由 通道名-out/in-数字组成

    service层代码:

    package com.jx.springCloud.service.impl;
    
    import com.jx.springCloud.service.MessageProvider;
    import org.springframework.cloud.stream.function.StreamBridge;
    import org.springframework.integration.support.MessageBuilder;
    import org.springframework.stereotype.Service;
    
    import java.util.UUID;
    
    /**
     * @author LDW
     * @date 2022/4/10 20:35
     */
    @Service
    public class MessageProviderImpl implements MessageProvider {
    
        private final StreamBridge streamBridge;
    
        public MessageProviderImpl(StreamBridge streamBridge) {
            this.streamBridge = streamBridge;
        }
    
        @Override
        public String send() {
            String serial = UUID.randomUUID().toString();
            streamBridge.send("myChannel-out-0", MessageBuilder.withPayload(serial).build());
            System.out.println("发送消息: " + serial);
            return null;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    @Autowire注解自动注入StreamBridge的实例,上述代码的写法省去了@Autowire注解

    StreamBridge的send方法第一个参数是binding的名字,第二个参数是想要发送的消息

    controller层代码:

    @RestController
    public class SendMessageController {
    
        private final MessageProvider messageProvider;
    
        public SendMessageController(MessageProvider messageProvider) {
            this.messageProvider = messageProvider;
        }
    
        @GetMapping("/sendMessage")
        public String sendMessage() {
            return messageProvider.send();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    消费者案例:

    yml配置:

    server:
      port: 8802
    
    spring:
      application:
        name: cloud-stream-consumer
      rabbitmq:
        host: 192.168.220.101
        port: 5672
        username: guest
        password: guest
      cloud:
        stream:
          bindings: #服务的整合处理
            myChannel-in-0: #这个名字是一个通道的名字
              destination: studyExchange #表示要使用Exchange名称定义
              contentType: application/json #设置消息类型,本次为json,文本则设置为“text/plain”
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    service层代码:

    @Service
    @Slf4j
    public class StreamConsumerService {
        @Bean
        public Consumer myChannel() {
            return message -> log.info("消息:"+message);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    上述代码的方法名(即Consumer的bean实例名)需要是yml配置中的通道名,应用程序启动后会自动接收生产者发送的消息

    发送请求:localhost:8801/sendMessage

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    系分 - 法律法规与标准化
    grafana配置钉钉告警模版(一)
    安排项目宣讲日程得到最多的宣讲场次
    java 强引用和弱引用
    java基于springboot+vue的在线点餐外卖系统 elementui
    Java EE-Spring Security配置
    设计模式之创建型模式:原型模式
    当鼠标移动到table的时候行列都有样式
    左连接一对多的情况
    堆--数据流中第K大元素
  • 原文地址:https://blog.csdn.net/m0_67392661/article/details/126116202