端點角色

從 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 物件。

當使用領導權選舉來啟動和停止元件時,務必將 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 名稱。