|
此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Integration 6.5.1! |
端点角色
从 4.2 版开始,可以将终结点分配给角色。
角色允许终结点作为一个组启动和停止。
这在使用领导选举时特别有用,其中可以在授予或撤销领导权时分别启动或停止一组端点。
为此,框架注册一个SmartLifecycleRoleControllerbean 在应用程序上下文中,名称为IntegrationContextUtils.INTEGRATION_LIFECYCLE_ROLE_CONTROLLER.
每当需要控制生命周期时,可以注入此 bean 或@Autowired:
<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();
}
以下示例演示如何使用SmartLifecycleRoleController在 Java 中:
@Autowired
private SmartLifecycleRoleController roleController;
...
this.roleController.addSmartLifeCycleToRole("cluster", someEndpoint);
...
以下示例演示如何使用IntegrationFlow在 Java 中:
IntegrationFlow flow -> flow
.handle(..., e -> e.role("cluster"));
其中每一个都会将端点添加到cluster角色。
调用roleController.startLifecyclesInRole("cluster")和相应的stop…方法启动和停止端点。
实现SmartLifecycle可以通过编程方式添加,而不仅仅是端点。 |
这SmartLifecycleRoleController实现ApplicationListener<AbstractLeaderEvent>它会自动启动和停止其配置的SmartLifecycle授予或撤销领导权时(当某些 Bean 发布OnGrantedEvent或OnRevokedEvent,分别)。
使用领导选举启动和停止组件时,请务必将auto-startupXML 属性 (autoStartupbean 属性) 设置为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)
| 1 | 返回正在管理的角色的列表。 |
| 2 | 返回true如果角色中的所有终结点都在运行。 |
| 3 | 返回true如果角色中没有一个终结点正在运行。 |
| 4 | 返回component name : running status.
组件名称通常是 bean 名称。 |