消息通道
虽然 Message
在封装数据方面发挥着关键作用,但却是 MessageChannel
将消息生产者与消息消费者解耦。
部分总结
📄️ MessageChannel 接口
Spring Integration 的顶级 MessageChannel 接口定义如下:
📄️ 消息通道实现
Spring Integration 提供了不同的消息通道实现。以下各节将简要描述每一种。
📄️ 通道拦截器
消息架构的一个优点是以非侵入性方式提供通用行为并捕获有关通过系统传递的消息的有意义信息的能力。由于消息实例是从 MessageChannel 实例发送和接收的,因此这些通道提供了拦截发送和接收操作的机会。以下清单中显示的 ChannelInterceptor 策略接口为每个操作提供了方法:
📄️ MessagingTemplate
当介绍端点及其各种配置选项时,Spring Integration 为消息组件提供了一个基础,该基础使得可以从消息系统非侵入式地调用您的应用程序代码。然而,有时有必要从您的应用程序代码调用消息系统。为了方便实现此类用例,Spring Integration 提供了一个 MessagingTemplate,它支持跨消息通道的各种操作,包括请求和回复场景。例如,可以发送请求并等待回复,如下所示:
📄️ 配置消息通道
要创建一个消息通道实例,你可以使用 元素用于 xml 或 DirectChannel 实例用于 Java 配置,如下所示:
📄️ 特殊通道
在应用程序上下文中,默认定义了两个特殊通道:errorChannel 和 nullChannel。'nullChannel'(NullChannel 的一个实例)类似于 /dev/null,它会以 DEBUG 级别记录发送给它的任何消息,并立即返回。对于传输消息的 org.reactivestreams.Publisher 负载,此通道会立即订阅它,以启动反应式流处理,尽管数据会被丢弃。从反应式流处理中抛出的错误(参见 Subscriber.onError(Throwable))会在 warn 级别下记录,以便可能的调查。如果需要对这种错误进行处理,可以使用带有 Mono.doOnError() 自定义设置的 ReactiveRequestHandlerAdvice 应用于将 Mono 回复发送到此 nullChannel 的消息处理器。每当您遇到不需要关心的回复的通道解析错误时,可以将受影响组件的 output-channel 属性设置为 'nullChannel'(名称 'nullChannel' 在应用程序上下文中是保留的)。