该版本仍在开发中,尚未被视为稳定。对于最新的稳定版本,请使用 Spring Integration 7.0.0spring-doc.cadn.net.cn

端点角色

从版本 4.2 开始,端点可以分配给角色。 角色允许作为一个组开始和停止端点。 这在使用领导权选举时尤为有用,因为在领导权授予或撤销时,可以启动或停止一组端点。 为此,框架注册了SmartLifecycleRoleController在应用上下文中,带有名称的 BEANIntegrationContextUtils.INTEGRATION_LIFECYCLE_ROLE_CONTROLLER. 每当需要控制生命周期时,这种豆子可以被注入或@Autowired:spring-doc.cadn.net.cn

<bean class="com.some.project.SomeLifecycleControl">
    <property name="roleController" ref="integrationLifecycleRoleController"/>
</bean>

您可以使用 XML、Java 配置或程序化方式为角色分配端点。 以下示例展示了如何使用XML配置端点角色:spring-doc.cadn.net.cn

<int:inbound-channel-adapter id="ica" channel="someChannel" expression="'foo'" role="cluster"
        auto-startup="false">
    <int:poller fixed-rate="60000" />
</int:inbound-channel-adapter>

以下示例展示了如何配置用 Java 创建的 Bean 的端点角色:spring-doc.cadn.net.cn

@Bean
@ServiceActivator(inputChannel = "sendAsyncChannel", autoStartup="false")
@Role("cluster")
public MessageHandler sendAsyncHandler() {
    return // some MessageHandler
}

以下示例展示了如何在 Java 中配置方法端点角色:spring-doc.cadn.net.cn

@Payload("#args[0].toLowerCase()")
@Role("cluster")
public String handle(String payload) {
    return payload.toUpperCase();
}

以下示例展示了如何通过使用SmartLifecycleRoleController在爪哇语中:spring-doc.cadn.net.cn

@Autowired
private SmartLifecycleRoleController roleController;
...
    this.roleController.addSmartLifeCycleToRole("cluster", someEndpoint);
...

以下示例展示了如何通过使用集成流程在爪哇语中:spring-doc.cadn.net.cn

IntegrationFlow flow -> flow
        .handle(..., e -> e.role("cluster"));

这些都将端点加到以下角色。spring-doc.cadn.net.cn

调用roleController.startLifecyclesInRole(“cluster”)以及相应的停。。。方法启动和停止端点。spring-doc.cadn.net.cn

任何实现SmartLifecycle可以编程添加——不仅仅是端点。

SmartLifecycleRoleController实现ApplicationListener<AbstractLeaderEvent>而且它会自动启动和停止配置SmartLifecycle当领导权被授予或撤销时(当某些豆子发布时)OnGrantedEventOnRevokedEvent分别是 。spring-doc.cadn.net.cn

在使用领导选举启动和停止组件时,设置自动启动XML 属性 (自动启动Bean 性质)变为false这样应用上下文在上下文初始化时不会启动组件。

从4.3.8版本开始,SmartLifecycleRoleController提供多种状态方法:spring-doc.cadn.net.cn

public Collection<String> getRoles() (1)

public boolean allEndpointsRunning(String role) (2)

public boolean noEndpointsRunning(String role) (3)

public Map<String, Boolean> getEndpointsRunningStatus(String role) (4)
1 返回正在管理的角色列表。
2 返回true如果角色中的所有端点都在运行。
3 返回true如果该角色中的端点都没有运行。
4 返回 的映射组件名称:运行状态. 成分名称通常是豆子名称。