对于最新的稳定版本,请使用 Spring Integration 6.4.0spring-doc.cadn.net.cn

控制总线

正如 Enterprise Integration Patterns (EIP) 一书中描述的,控制总线背后的思想是,可以使用与用于 “应用程序级” 消息传递相同的消息传递系统来监控和管理框架内的组件。 在 Spring 集成中,我们构建在上述适配器的基础上,以便您可以发送消息作为调用公开作的一种方式。spring-doc.cadn.net.cn

以下示例说明如何使用 XML 配置控制总线:spring-doc.cadn.net.cn

<int:control-bus input-channel="operationChannel"/>

控制总线有一个 Importing 通道,可以访问该通道以调用应用程序上下文中的 bean 上的作。 它还具有服务激活终端节点的所有通用属性。 例如,如果作结果具有要发送到下游通道的返回值,则可以指定输出通道。spring-doc.cadn.net.cn

控制总线将 input 通道上的消息作为 Spring 表达式语言 (SpEL) 表达式运行。 它接受一条消息,将 body 编译为表达式,添加一些上下文,然后运行它。 默认上下文支持已使用@ManagedAttribute@ManagedOperation. 它还支持 Spring 的Lifecycle接口(及其Pausable扩展),并且它支持用于配置 Spring 的多个TaskExecutorTaskScheduler实现。 确保您自己的方法可用于控制总线的最简单方法是使用@ManagedAttribute@ManagedOperation附注。 由于这些注解也用于向 JMX MBean 注册表公开方法,因此它们提供了一个方便的副产品:通常,您希望向控制总线公开的相同类型的作对于通过 JMX 公开是合理的。 应用程序上下文中任何特定实例的解析都是在典型的 SPEL 语法中实现的。 为此,请为 bean name 提供 bean 的 SPEL 前缀 () 。 例如,要在 Spring Bean 上执行方法,客户端可以向作通道发送消息,如下所示:@spring-doc.cadn.net.cn

Message operation = MessageBuilder.withPayload("@myServiceBean.shutdown()").build();
operationChannel.send(operation)

表达式的上下文根是Message本身,因此您还可以访问payloadheaders作为变量。 这与 Spring 集成端点中的所有其他表达式支持一致。spring-doc.cadn.net.cn

使用 Java 注释,您可以按如下方式配置控制总线:spring-doc.cadn.net.cn

@Bean
@ServiceActivator(inputChannel = "operationChannel")
public ExpressionControlBusFactoryBean controlBus() {
    return new ExpressionControlBusFactoryBean();
}

同样,您可以按如下方式配置 Java DSL 流定义:spring-doc.cadn.net.cn

@Bean
public IntegrationFlow controlBusFlow() {
    return IntegrationFlow.from("controlBus")
              .controlBus()
              .get();
}

如果您更喜欢将 lambda 表达式与自动DirectChannel创建,您可以按如下方式创建 Control Bus:spring-doc.cadn.net.cn

@Bean
public IntegrationFlow controlBus() {
    return IntegrationFlowDefinition::controlBus;
}

在这种情况下,通道被命名为controlBus.input.spring-doc.cadn.net.cn


APP信息