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