开发者社区> 问答> 正文

使用 RocketMQ Binder的底层处理原理是什么?

使用 RocketMQ Binder的底层处理原理是什么?

展开
收起
vncamyi27xznk 2021-11-11 11:03:12 505 0
1 条回答
写回答
取消 提交回答
  • image.png

    "1. @EnableBinding 对应的两个接口属性 Source 和 Sink 是 SCS 内部提供的。 SCS 内部会基于 Source 和 Sink 构造 BindableProxyFactory,且对应的 output 和 input 方法返回的 MessageChannel 是 DirectChannel。output 和 input 方法修饰的注解对应的 value 是配置文件中 binding 的 name。 public interface Source { String OUTPUT = ""output""; @Output(Source.OUTPUT) MessageChannel output();}public interface Sink { String INPUT = ""input""; @Input(Sink.INPUT) SubscribableChannel input(); } 配置文件里 bindings 的 name 为 output 和 input,对应 Source 和 Sink 接口的方法上的注解里的 value: spring.cloud.stream.bindings.output.destination=test-topic spring.cloud.stream.bindings.output.content-type=text/plain spring.cloud.stream.rocketmq.bindings.output.producer.group=demo-group spring.cloud.stream.bindings.input.destination=test-topic spring.cloud.stream.bindings.input.content-type=text/plain spring.cloud.stream.bindings.input.group=test-group1 2. 构造 CommandLineRunner,程序启动的时候会执行 CustomRunner 的 run 方法。 3. 调用 Source 接口里的 output 方法获取 DirectChannel,并发送消息到这个消息通道中。这里跟之前 Spring Integration 章节里的代码一致。  Source 里的 output 发送消息到 DirectChannel 消息通道之后会被 AbstractMe ssageChannelBinder#SendingHandler 这个 MessageHandler 处理,然后它会委托给 AbstractMessageChannelBinder#createProducerMessageHandler 创建的 MessageHandler 处理(该方法由不同的消息中间件实现);  不同的消息中间件对应的 AbstractMessageChannelBinder#createProducerMess ageHandler 方法返回的 MessageHandler 内部会把 Spring Message 转换成对应中间件的 Message 模型并发送到对应中间件的 broker; 4. 使用 @StreamListener 进行消息的订阅。请注意,注解里的 Sink.input 对应的值是 ""input"",会根据配置文件里 binding 对应的 name 为 input 的值进行配置:  不同的消息中间件对应的 AbstractMessageChannelBinder#createConsumerEnd point 方法会使用 Consumer 订阅消息,订阅到消息后内部会把中间件对应的 Message 模型转换成 Spring Message;  消息转换之后会把 Spring Message 发送至 name 为 input 的消息通道中;  @StreamListener 对应的 StreamListenerMessageHandler 订阅了 name 为 input 的消息通道,进行了消息的消费; 这本电子书收录开发者藏经阁,下载连接:https://developer.aliyun.com/topic/download?id=1216"

    2021-11-11 19:08:58
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
RocketMQ Client-GO 介绍 立即下载
RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载
基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载