消息端点
章节总结
📄️ 消息端点
本章的第一部分涵盖了一些背景理论,并揭示了驱动 Spring Integration 各种消息传递组件的底层 API 的诸多细节。如果您希望真正理解幕后的运作机制,这些信息会很有帮助。不过,如果您想直接开始使用基于命名空间的简化配置来设置各种元素,现在可以暂时跳到端点命名空间支持部分。
📄️ Endpoint Roles
从版本 4.2 开始,端点可以被分配给角色。角色允许端点以组的形式启动和停止。这在领导选举中特别有用,当领导权被授予或撤销时,可以相应地启动或停止一组端点。为此,框架在应用程序上下文中注册了一个名为 IntegrationContextUtils.INTEGRATION\_LIFECYCLE\_ROLE\_CONTROLLER 的 SmartLifecycleRoleController bean。每当需要控制生命周期时,可以注入或使用 @Autowired 注解来获取这个 bean:
📄️ 领导力事件处理
端点组可以根据领导权的授予或撤销分别启动和停止。这在集群场景中非常有用,因为共享资源必须仅由单个实例使用。例如,轮询共享目录的文件入站通道适配器就属于这种情况。(参见读取文件)。
📄️ 消息网关
网关隐藏了Spring Integration提供的消息API。它让您的应用程序业务逻辑无需了解Spring Integration API。通过使用通用网关,您的代码仅需与简单接口交互。
📄️ 服务激活器
服务激活器是一种端点类型,用于将任何Spring管理的对象连接到输入通道,使其能够扮演服务的角色。如果该服务产生输出,它也可以连接到输出通道。或者,产生输出的服务可以位于处理管道或消息流的末端,在这种情况下,可以使用入站消息的replyChannel头。如果未定义输出通道,这是默认行为。与这里描述的大多数配置选项一样,相同的行为实际上适用于大多数其他组件。
📄️ Delayer
延迟器是一个简单的端点,它允许消息流延迟一定的时间间隔。当消息被延迟时,原始发送方不会阻塞。相反,延迟的消息会被安排给一个 org.springframework.scheduling.TaskScheduler 实例,在延迟时间过后发送到输出通道。这种方法即使对于相当长的延迟也具有可扩展性,因为它不会导致大量发送方线程被阻塞。相反,在典型情况下,会使用线程池来实际执行消息的释放。本节包含几个配置延迟器的示例。
📄️ 脚本支持
Spring Integration 2.1 增加了对 Java 6 版本中引入的 JSR223 Scripting for Java 规范的支持。它允许您使用任何支持的语言(包括 Ruby、JRuby、Groovy 和 Kotlin)编写的脚本来为各种集成组件提供逻辑,类似于 Spring Integration 中使用 Spring 表达式语言 (SpEL) 的方式。有关 JSR223 的更多信息,请参阅文档。
📄️ Groovy 支持
在 Spring Integration 2.0 中,我们增加了对 Groovy 的支持,允许您使用 Groovy 脚本语言为各种集成组件提供逻辑——类似于 Spring 表达式语言(SpEL)在路由、转换和其他集成问题中所支持的方式。有关 Groovy 的更多信息,请参阅 Groovy 文档,您可以在项目网站上找到该文档。
🗃️ 添加行为到端点
12 个项目
📄️ 日志通道适配器
 常与线路分接器结合使用,正如线路分接器章节所述。然而,它也可以作为任何流程的最终消费者。例如,考虑一个以 结束的流程,该组件会返回结果,但您希望丢弃该结果。为此,您可以将结果发送到 NullChannel。或者,您可以将其路由到 INFO 级别的 。这样,当以 INFO 级别记录日志时,您可以看到被丢弃的消息,但在例如 WARN 级别记录日志时则看不到。如果使用 NullChannel,您只能在 DEBUG 级别记录日志时看到被丢弃的消息。以下列表展示了 logging-channel-adapter 元素所有可能的属性:
📄️ java.util.function 接口支持
从 5.1 版本开始,Spring Integration 直接支持 java.util.function 包中的接口。所有消息端点(服务激活器、转换器、过滤器等)现在都可以引用 Function(或 Consumer)类型的 Bean。消息注解可以直接应用于这些 Bean,类似于常规的 MessageHandler 定义。例如,如果你有如下 Function Bean 定义:
📄️ Kotlin 支持
该框架还进行了改进,以支持 Kotlin lambda 函数,因此现在你可以结合使用 Kotlin 语言和 Spring Integration 流定义: