前提・実現したいこと
Spring Cloud Streamを利用して、MQ(RabbitMQ or Kafka)に
キューイングされているメッセージをN件まとめて一気に取得したいのですが、やり方が分かっていません。
Spring Cloud Stream側の実装でできるものなのか、
ミドルウェアのMQの機能に依存するような事なのか、よく分かっていません。
該当のソースコード
以下はごくシンプルなコードで、キューイングされたメッセージを1件取得する例です。
Java
1@SpringBootApplication 2@EnableBinding(Sink.class) 3public class HelloSinkApplication { 4 5 public static void main(String[] args) { 6 SpringApplication.run(HelloSinkApplication.class, args); 7 } 8 9 @StreamListener(Sink.INPUT) 10 public void receive(String data) { 11 System.out.println("Received " + data); 12 } 13}
試したこと
MQにメッセージ送信側でList形式でデータをまとめて送信すれば、当然MQ受信側でまとめてデータを取得は可能です。
@StreamListener(Sink.INPUT) public void receive(String List<String> dataList) { }
そうではなく、MQ受信側で任意に決めた件数をまとめて一気に取得することがやりたいです。
プロパティの設定等を探してみましたが、それらしきものが見つからず。。。
また、以下のようにstaticなlistにaddして、ある件数になったら処理するみたいなことはできるのでしょうが、非常に微妙です。。。
public static List<String> dataList = new ArrayList<>(); @StreamListener(Sink.INPUT) public void receive(String data) { dataList.add(data); if(dataList.size >= 10) { } }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。