LoginSignup
1
0

More than 3 years have passed since last update.

SpringIntegrationで動的に接続先を作る

Last updated at Posted at 2019-05-16

発端

  • TCP/IPで複数のサーバへ同時に接続し受信する。
  • 接続先は固定数では無く、運用中に不定期に追加される。

ってのが開発の前提条件
XMLファイルで設定するint-ip:tcp-inbound-channel-adapter等は静的な設定しか出来ないっぽくて接続先分予め用意する必要があるためやりたいことが出来ない。
従ってjavaでadapterの生成やchannelの設定を行うことにした。

事前準備

  • bean生成用クラスに@Configuration()を設定
  • メソッドに@Bean@Scope("prototype")を設定する
  • scopeをprotptypeにしないとsingletonとなるので注意

サンプルコード

TCP/IP受信アダプター

@Bean
@Scope("prototype")
public TcpReceivingChannelAdapter gettcpadapter(AbstractConnectionFactory connectionfactory) {
    TcpReceivingChannelAdapter adapter = Tcp.inboundAdapter(connectionfactory)
            .clientMode(true).autoStartup(false).get();
    return adapter;
}

bean名を設定したい場合は、生成後に呼び出し元で付けないと反映されなかった。

<int:bridge>相当のオブジェクト生成

@Bean
@Scope("prototype")
public EventDrivenConsumer getBridge(SubscribableChannel input, MessageChannel output) {
    // ハンドラも@bean生成した方が良いのか不明
    BridgeHandler handler = new BridgeHandler();
    handler.setOutputChannel(output);
    EventDrivenConsumer bridge = new EventDrivenConsumer(input, handler);
    return bridge;
}

受信データを最終的にXMLで定義したchannelに流したいので必要だった。

<int:header-enricher>相当のオブジェクト生成

@Bean
@Scope("prototype")
public EventDrivenConsumer getHeaderEnricher(SubscribableChannel input, MessageChannel output, String setmessage) {
    Map<String, HeaderValueMessageProcessor<?>> headersToAdd = new HashMap<String, HeaderValueMessageProcessor<?>>();
    headersToAdd.put("HOGE", new StaticHeaderValueMessageProcessor<String>(setmessage + "_hogehoge"));

    HeaderEnricher transformer = new HeaderEnricher(headersToAdd );
    MessageTransformingHandler handler = new MessageTransformingHandler(transformer );
    handler.setOutputChannel(output);
    EventDrivenConsumer consumer = new EventDrivenConsumer(input, handler);
    return consumer;
}

ヘッダーに色々情報を付加したかったのでこれも必要だった。

終わりに

以上で必要なパーツは揃ったので今回はここまで
もう少し簡単な方法や他のパーツも必要な時は追記します。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0