実際にはこれは実行されません。たぶん私は何か誤解してしまったが、これはとにかくできない。私は2つのリスナを1つの同じキューに設定しようとしていますが、同じ交換はしますが、ルーティングキーだけが異なるはずです。私の問題は何とか物事が乱れることです。その結果、リスナーAはリスナーB向けのメッセージを取得しますが、時には時にはすべてがうまく動作することもあります。助言がありますか?spring ampq注釈は1つのキューを駆動します2つのリスナーはルーティングキーを区別します
のMyConfig
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(getHostname());
connectionFactory.setUsername(getUsername());
connectionFactory.setPassword(getPassword());
return connectionFactory;
}
@Bean
public RabbitAdmin rabbitAdmin() {
return new RabbitAdmin(connectionFactory());
}
@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory() {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setMessageConverter(new CustomMessageConverter());
factory.setConnectionFactory(connectionFactory());
factory.setAcknowledgeMode(AcknowledgeMode.AUTO);
factory.setConcurrentConsumers(10);
factory.setMaxConcurrentConsumers(10);
return factory;
}
@Override
public void configureRabbitListeners(RabbitListenerEndpointRegistrar registrar) {
registrar.setMessageHandlerMethodFactory(myHandlerMethodFactory());
}
@Bean
public DefaultMessageHandlerMethodFactory myHandlerMethodFactory() {
DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory();
factory.setMessageConverter(new MappingJackson2MessageConverter());
return factory;
}
MyListeners
@RabbitListener(bindings = @QueueBinding(value = @Queue(value = QUEUE, durable = "true"), exchange = @Exchange(value = EXCHANGE, type = "topic", durable = "true", ignoreDeclarationExceptions = "true"), key = "routingKeyA"))
public String myListenerA(@Payload PayloadA payload, @Header(AmqpHeaders.CORRELATION_ID) byte[] correlationId) {
return SUCCESS_RESPONSE;
}
MyListener B
@RabbitListener(bindings = @QueueBinding(value = @Queue(value = QUEUE, durable = "true"), exchange = @Exchange(value = EXCHANGE, type = "topic", durable = "true", ignoreDeclarationExceptions = "true"), key = "routingKeyB"))
public String myListenerB(@Payload PayloadB payload, @Header(AmqpHeaders.CORRELATION_ID) byte[] correlationId) {
return SUCCESS_RESPONSE;
}
追加情報:私は、このキューで20人の消費者を持っています。 Thxで事前に!
大変ありがとうございます。あなたのアンカーはとても役に立ちました。 – stritzi
問題ありません。私はあなたが新しいここにいるのを見ます。ここでは、「受け入れられた」(投票ボタンの下にあるチェックマーク/チェックマークをクリック)というマークを付けるのが通例です。これは、同様の質問に対する回答を探すときに他の人を助けるでしょう。 –
ありがとうございました。確かに私はここでもっと活発にしようとしています!また、本当に私を助けてくれたstackoverflowに関する他の質問をお寄せいただきありがとうございます。 – stritzi