此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

《企业集成模式》(Enterprise Integration Patterns, EIP)一书中所述,控制总线背后的思想是,与用于“应用程序级”消息传递相同的消息传递系统可用于监视和管理框架中的组件。 在 Spring Integration 中,我们基于上述适配器进行构建,以便您可以发送消息作为调用公开操作的一种方式。Spring中文文档

以下示例演示如何使用 XML 配置控制总线:Spring中文文档

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

控制总线具有一个输入通道,可用于调用应用程序上下文中对 Bean 的操作。 它还具有服务激活终结点的所有通用属性。 例如,如果操作的结果具有要发送到下游通道的返回值,则可以指定输出通道。Spring中文文档

控制总线在输入通道上将消息作为 Spring 表达式语言 (SpEL) 表达式运行。 它接受一条消息,将正文编译为表达式,添加一些上下文,然后运行它。 默认上下文支持任何已使用 或 批注的方法。 它还支持 Spring 接口上的方法(以及自 5.2 版以来的扩展),并且支持用于配置多个 Spring 和实现的方法。 确保自己的方法可用于控制总线的最简单方法是使用 or 注释。 由于这些注释也用于向 JMX MBean 注册表公开方法,因此它们提供了一个方便的副产品:通常,要向控制总线公开的相同类型的操作对于通过 JMX 公开是合理的。 应用程序上下文中任何特定实例的解析都是在典型的 SpEL 语法中实现的。 为此,请为 Bean 名称提供 Bean 和 Bean 的 SpEL 前缀 ()。 例如,要在 Spring Bean 上执行方法,客户端可以向操作通道发送消息,如下所示:@ManagedAttribute@ManagedOperationLifecyclePausableTaskExecutorTaskScheduler@ManagedAttribute@ManagedOperation@Spring中文文档

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

表达式上下文的根是 本身,因此您还可以访问表达式中的 and as 变量。 这与 Spring Integration 端点中的所有其他表达式支持一致。MessagepayloadheadersSpring中文文档

使用 Java 注解,您可以按如下方式配置控制总线:Spring中文文档

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

同样,您可以按如下方式配置 Java DSL 流定义:Spring中文文档

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

如果您希望使用具有自动创建功能的 lambda,则可以按如下方式创建控制总线:DirectChannelSpring中文文档

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

在本例中,通道被命名为 。controlBus.inputSpring中文文档