私は、異なるトピックのメッセージを送信し、それから聞きたいトピックで消費者を設定しようとしています。春の雲のストリームrabbitmq消費者の話題を指定します。
私の考えは、単一の宛先 "domainMessage"を使用し、カスタムパーティション戦略を使用することです。私は列挙型を持っており、私はpartitionKeyとしてその値を使用しているだけで、partitionStrategyはキーを返すだけです(キーは常にプロデューサ側のパーティション数と等しいと仮定します)。
これは機能しますか?もしそうなら、私は消費者をどのように設定するか分からない。
私のプロデューサーは、以下の持っている
@Override
public Object extractKey(Message<?> message) {
DomainMessage payload = (DomainMessage) message.getPayload();
return payload.getType();
}
マイPartitionStrategyImplが
@Override
public int selectPartition(Object key, int partitionCount) {
return (int)key;
}
マイ消費者application.propertiesのように見えます
のように見えるようにspring.cloud.stream.bindings.output.destination=domainMessages
spring.cloud.stream.bindings.output.producer.partition-key-extractor-class=publisher.partitionstrategy.PartitionKeyExtractorImpl
spring.cloud.stream.bindings.output.producer.partition-selector-class=publisher.partitionstrategy.PartitionSelectorStrategyImpl
spring.cloud.stream.bindings.output.producer.partition-count=3
マイPartitionKeyExtractorImplが見えますapplication.properties
spring.cloud.stream.bindings.input.destination=domainMessage
spring.cloud.stream.bindings.input.group=group01
spring.cloud.stream.bindings.input.consumer.partitioned=true
spring.cloud.stream.rabbit.bindings.input.consumer.durable-subscription=true
たとえば、payload.getType()
は1〜3の値を返すことができます。 partitionKeyを1と3にしたメッセージだけを聞くようにコンシューマーを設定するにはどうすればよいですか?
この機能は今後サポートされる予定ですか?ちょうど好奇心が強い – user3344591
それは前に出てきたものではありません。通常は、パーティション分割とキー選択を設定してメッセージを1つのパーティションに移動します。つまり、ケース0の場合は0、1をパーティション0に送信します。[GitHub Issue](https://github.com/spring -cloud/spring-cloud-stream/issues)を提示してください。 –
開封 https://github.com/spring-cloud/spring-cloud-stream/issues/648 – user3344591