端點角色
從 4.2 版本開始,端點可以被分配到角色。角色允許端點作為一個組啟動和停止。這在使用領導選舉時特別有用,當授予或撤銷領導權時,可以相應地啟動或停止一組端點。為此,框架會在應用程式上下文中註冊一個 SmartLifecycleRoleController
bean,其名稱為 IntegrationContextUtils.INTEGRATION_LIFECYCLE_ROLE_CONTROLLER
。無論何時需要控制生命週期,都可以注入或 @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();
}
以下示例展示瞭如何使用 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>
,當領導權被授予或撤銷時(當某個 bean 分別釋出 OnGrantedEvent
或 OnRevokedEvent
時),它會自動啟動和停止其配置的 SmartLifecycle
物件。
當使用領導選舉來啟動和停止元件時,將 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)
1 | 返回正在管理的角色的列表。 |
2 | 如果角色中的所有端點都在執行,則返回 true 。 |
3 | 如果角色中的所有端點都不在執行,則返回 true 。 |
4 | 返回一個 元件名稱 : 執行狀態 的對映。元件名稱通常是 bean 名稱。 |