2016-09-10 6 views
0

1モジュールでメッセージを変換してルーティングする方法。
私はこのようなモジュールを作成: Spring XDを1つのモジュールに変換してメッセージをルーティング

public Event transform(String payload) { 
    Event event = tupleDeserializer.fromJson(payload); 
    event.setId(UUID.randomUUID().toString()); 
    logger.warn("=======TA Core Transform======= {} ===========", event.getId()); 
    return event; 
    } 

    public List<String> route(Event payload) { 
    List<String> outChannels = new ArrayList<>(); 
    List<PolicyAction> policyActions = policyEnforcer.enforce(payload); 

    if (policyActions.contains(PolicyAction.PERSIST)) { 
     outChannels.add(persistChannel); 
    } 
    if (policyActions.contains(PolicyAction.CORRELATE)) { 
     outChannels.add(correlateChannel); 
    } 
    logger.warn("=======TA Core Route======= {} ========== {} ===============", payload.getId(), policyActions); 

    return outChannels; 
    } 

しかし、私はこのように取得ログのXdTaCore.java

XD-TA-core.xml

<int:channel id="input"/> 
<int:channel id="output"/> 
<beans:bean id="taCore" class="com.company.threatanalyzer.xd.plugin.XdTaCore"> 
    <constructor-arg value="${inputLogsType}"/> 
    <constructor-arg value="${zookeeperHost}"/> 
    <property name="persistChannel" value="${persistChannel}"/> 
    <property name="correlateChannel" value="${correlateChannel}"/> 
</beans:bean> 

<int:transformer input-channel="input" output-channel="output" ref="taCore" method="transform"/> 
<int:router input-channel="output" ref="taCore" method="route"/> 

を:

2016-09-10T14:35:26+0430 1.3.1.RELEASE WARN pool-27-thread-1 plugin.XdTaCore - =======TA Core Transform======= dc6209e2-79ff-4b88-a245-4b12a603058c ========== {} 
2016-09-10T14:35:26+0430 1.3.1.RELEASE WARN pool-27-thread-1 plugin.XdTaCore - =======TA Core Route======= dc6209e2-79ff-4b88-a245-4b12a603058c ========== [CORRELATE, PERSIST] =========== 
2016-09-10T14:35:26+0430 1.3.1.RELEASE WARN pool-27-thread-1 plugin.XdTaCore - =======TA Core Transform======= fabcf574-32b1-4510-96c5-8be44ae8b757 ========== {} 
2016-09-10T14:35:27+0430 1.3.1.RELEASE WARN pool-27-thread-1 plugin.XdTaCore - =======TA Core Transform======= 4f07e5e8-7f0e-4e48-a6a0-813e57dd081c ========== {} 
2016-09-10T14:35:27+0430 1.3.1.RELEASE WARN pool-27-thread-1 plugin.XdTaCore - =======TA Core Route======= 4f07e5e8-7f0e-4e48-a6a0-813e57dd081c ========== [CORRELATE, PERSIST] =========== 
2016-09-10T14:35:27+0430 1.3.1.RELEASE WARN pool-27-thread-1 plugin.XdTaCore - =======TA Core Transform======= 6393be33-6188-405d-b0b3-8e9f87ec4af0 ========== {} 
2016-09-10T14:35:28+0430 1.3.1.RELEASE WARN pool-27-thread-1 plugin.XdTaCore - =======TA Core Transform======= 58b17358-58b8-46f3-894a-b7b5811564bc ========== {} 
2016-09-10T14:35:28+0430 1.3.1.RELEASE WARN pool-27-thread-1 plugin.XdTaCore - =======TA Core Route======= 58b17358-58b8-46f3-894a-b7b5811564bc ========== [CORRELATE, PERSIST] =========== 
2016-09-10T14:35:28+0430 1.3.1.RELEASE WARN pool-27-thread-1 plugin.XdTaCore - =======TA Core Transform======= e92e153d-8f39-4ae5-9c82-14a7f141aef5 ========== {} 

変換機能はメッセージごとに実行されますが、それらの半分のために実行します。

そして、別の質問パフォーマンスに優れているもの:

  • コードの10行を行う一つのモジュールそれぞれがコード

答えて

1

の2行を行う

  • 5のモジュールがありますチャネルoutputの2つのサブスクライバ - メッセージバスとルータ。このシナリオでは、メッセージが交互に送信されます。あなたの変圧器とルータ間の第3の、中間の、チャネルを(例えばtoRouter)を使用する必要があり

    ...

    <int:transformer input-channel="input" output-channel="toRouter" ref="taCore" method="transform"/> 
    
    <int:router input-channel="toRouter" ref="taCore" method="route"/> 
    

    トランス出力チャネルは、ルータの入力チャンネルです。

    そして、別の質問では、パフォーマンスのために優れているものです。

    それは依存します。このような単純なコンポーネントでは、単一のモジュールを使用する方が良いでしょう。より複雑なシナリオでは、コンポーネントを個別にスケールする必要がある場合は、別々のモジュールが適しているかもしれません。

  • 関連する問題