2016-05-30 9 views
1

私はSpring Integration DSLを初めて使用しています。現在、私はメッセージチャネル - "ordersChannel"と "bookItemsChannel"の間に遅延 を追加しようとしています。しかし、流れは遅れがないかのように続きます。 助けていただければ幸いです。ここ はコードです:メッセージチャネル間でメッセージを送信するときに遅延が発生しない

@Bean 
public IntegrationFlow ordersFlow() { 
    return IntegrationFlows.from("ordersChannel") 
      .split(new AbstractMessageSplitter() { 

       @Override 
       protected Object splitMessage(Message<?> message) { 

        return ((Order)message.getPayload()).getOrderItems(); 
       } 
      }) 
      .delay("normalMessage", new Consumer<DelayerEndpointSpec>() { 

       public void accept(DelayerEndpointSpec spec) { 
        spec.id("delayChannel"); 
        spec.defaultDelay(50000000); 
        System.out.println("Going to delay"); 
       } 
      }) 
      .channel("bookItemsChannel") 
      .get(); 
} 

答えて

1

あなたは遅延が各着信メッセージのために起こることSystem.out.println("Going to delay");と実際の実行時間を、見たときにinit相を混合すること私のためと思われます。

私たちは、DSLプロジェクトのいくつかの遅延テスト・ケースを持っていますが、私はちょうどdefaultDelayがうまく機能することを証明するためにこれを書いている:

@Bean 
public IntegrationFlow ordersFlow() { 
    return f -> f 
      .split() 
      .delay("normalMessage", (DelayerEndpointSpec e) -> e.defaultDelay(5000)) 
      .channel(c -> c.queue("bookItemsChannel")); 
} 

... 

@Autowired 
@Qualifier("ordersFlow.input") 
private MessageChannel ordersFlowInput; 

@Autowired 
@Qualifier("bookItemsChannel") 
private PollableChannel bookItemsChannel; 

@Test 
public void ordersDelayTests() { 
    this.ordersFlowInput.send(new GenericMessage<>(new String[] {"foo", "bar", "baz"})); 

    StopWatch stopWatch = new StopWatch(); 
    stopWatch.start(); 
    Message<?> receive = this.bookItemsChannel.receive(10000); 
    assertNotNull(receive); 

    receive = this.bookItemsChannel.receive(10000); 
    assertNotNull(receive); 

    receive = this.bookItemsChannel.receive(10000); 
    assertNotNull(receive); 
    stopWatch.stop(); 

    assertThat(stopWatch.getTotalTimeMillis(), greaterThanOrEqualTo(5000L)); 
} 

あなたはそれは、あなたの設定に非常に近い見ての通り.delay()については何か間違っていることを証明するものではありません。

したがって、予期せぬ問題を確認するために類似のものを提供する方がよいでしょう。

+0

はい。あなたが正しいです。遅延は期待通りに機能しています。遅れが実際に起こる前に私の春の文脈は閉ざされていた。 – ShankaraNarayanan

関連する問題