跳到主要内容
版本:7.0.2

端点角色

DeepSeek V3 中英对照 Endpoint Roles

从版本 4.2 开始,端点可以被分配给角色。角色允许端点以组的形式启动和停止。这在配合使用领导选举时特别有用,当领导权被授予或撤销时,可以相应地启动或停止一组端点。为此,框架在应用上下文中注册了一个名为 IntegrationContextUtils.INTEGRATION_LIFECYCLE_ROLE_CONTROLLERSmartLifecycleRoleController bean。每当需要控制生命周期时,可以注入或使用 @Autowired 来获取这个 bean:

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

您可以使用 XML、Java 配置或编程方式为角色分配端点。以下示例展示了如何使用 XML 配置端点角色:

<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 配置端点角色:

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

以下示例展示了如何在 Java 中为方法配置端点角色:

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

以下示例展示了如何在 Java 中使用 SmartLifecycleRoleController 配置端点角色:

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

以下示例展示了如何在 Java 中使用 IntegrationFlow 配置端点角色:

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

每个操作都会将端点添加到 cluster 角色中。

调用 roleController.startLifecyclesInRole("cluster") 及相应的 stop…​ 方法可启动和停止端点。

备注

任何实现了 SmartLifecycle 的对象都可以通过编程方式添加——不仅仅是端点。

SmartLifecycleRoleController 实现了 ApplicationListener<AbstractLeaderEvent> 接口,当领导权被授予或撤销时(即当某个 Bean 分别发布 OnGrantedEventOnRevokedEvent 事件时),它会自动启动或停止其配置的 SmartLifecycle 对象。

important

在使用领导选举机制来启动和停止组件时,务必将 auto-startup XML 属性(或 autoStartup bean 属性)设置为 false,以确保应用上下文在初始化期间不会自动启动这些组件。

从版本 4.3.8 开始,SmartLifecycleRoleController 提供了多种状态方法:

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
  • 返回正在管理的角色列表。

  • 如果角色中的所有端点都在运行,则返回 true

  • 如果角色中的所有端点都未运行,则返回 true

  • 返回一个 组件名称 : 运行状态 的映射。组件名称通常是 bean 的名称。