端點角色
從 4.2 版開始,端點可以指派角色。角色讓端點可以群組方式啟動和停止。當使用領導權選舉時,這特別有用,在領導權授予或撤銷時,可以啟動或停止一組端點。為此,框架在應用程式內容中註冊一個名為 IntegrationContextUtils.INTEGRATION_LIFECYCLE_ROLE_CONTROLLER
的 SmartLifecycleRoleController
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 發佈 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 名稱。 |