irpas技术客

SpringCloud Stream @EnableBinding注解过时_00发II

irpas 7869

@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”

注意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; } }

@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(); } }

消费者案例:

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”

service层代码:

@Service @Slf4j public class StreamConsumerService { @Bean public Consumer<String> myChannel() { return message -> log.info("消息:"+message); } }

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

发送请求:localhost:8801/sendMessage

?

?

?


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #springcloud #stream #port #8801spring