从版本 4.2 开始,可以将终结点分配给角色。 角色允许终结点作为一个组启动和停止。 这在使用领导力选举时特别有用,在领导力被授予或撤销时,可以启动或停止一组端点。 为此,框架在应用程序上下文中注册了一个名为 的 Bean。 每当需要控制生命周期时,都可以注入此 Bean 或:SmartLifecycleRoleControllerIntegrationContextUtils.INTEGRATION_LIFECYCLE_ROLE_CONTROLLER@AutowiredSpring中文文档

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

您可以使用 XML、Java 配置或以编程方式将端点分配给角色。 以下示例演示如何使用 XML 配置终结点角色:Spring中文文档

<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中文文档

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

以下示例演示如何在 Java 中的方法上配置端点角色:Spring中文文档

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

以下示例演示如何使用 in Java 配置端点角色:SmartLifecycleRoleControllerSpring中文文档

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

以下示例演示如何在 Java 中使用端点角色配置端点角色:IntegrationFlowSpring中文文档

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

其中每个都会将终结点添加到角色中。clusterSpring中文文档

调用和相应的方法启动和停止终结点。roleController.startLifecyclesInRole("cluster")stop…​Spring中文文档

任何实现的对象都可以以编程方式添加,而不仅仅是端点。SmartLifecycle
任何实现的对象都可以以编程方式添加,而不仅仅是端点。SmartLifecycle

实现,当授予或撤销领导权时(当某些 Bean 分别发布或 时),它会自动启动和停止其配置的对象。SmartLifecycleRoleControllerApplicationListener<AbstractLeaderEvent>SmartLifecycleOnGrantedEventOnRevokedEventSpring中文文档

使用领导选举来启动和停止组件时,必须将 XML 属性(bean 属性)设置为,以便应用程序上下文在上下文初始化期间不会启动组件。auto-startupautoStartupfalse
使用领导选举来启动和停止组件时,必须将 XML 属性(bean 属性)设置为,以便应用程序上下文在上下文初始化期间不会启动组件。auto-startupautoStartupfalse

从版本 4.3.8 开始,提供几种状态方法:SmartLifecycleRoleControllerSpring中文文档

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 返回 的映射。 组件名称通常是 Bean 名称。component name : running status
1 返回正在管理的角色的列表。
2 如果角色中的所有终结点都在运行,则返回。true
3 如果角色中没有任何终结点正在运行,则返回。true
4 返回 的映射。 组件名称通常是 Bean 名称。component name : running status