私は春AMQPのRabbitMQの実装を要求/応答パターンをテストしていると私はそれを動作させることができない...RabbitMQの要求/応答「RabbitTemplateがリスナーとして構成されていない」
私は次のように構成ガット成果物:
グリーティングキューでtest_exchangeルーティングキー=挨拶
reply_exchangeと返信キュー。ルーティングキーは=私はgithubのに次の例た
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory =
new CachingConnectionFactory("....IP of broker...");
connectionFactory.setUsername("guest");
connectionFactory.setPassword("guest");
return connectionFactory;
}
@Bean
public Queue greeting() {
return new Queue("greeting");
}
@Bean
public Queue replies() {
return new Queue("replies");
}
MessageListener receiver() {
return new MessageListenerAdapter(new RabbitMqReceiver(), "onMessage");
}
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, Queue replies) {
RabbitTemplate template = new RabbitTemplate(connectionFactory);
template.setExchange("test_exchange");
template.setRoutingKey("greeting");
template.setReplyAddress("reply_exchange"+"/"+replies.getName());
template.setReplyTimeout(60000);
return template;
}
@Bean
public SimpleMessageListenerContainer replyContainer(ConnectionFactory connectionFactory,
RabbitTemplate rabbitTemplate, Queue replies) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setMessageListener(rabbitTemplate);
container.setQueues(replies);
return container;
}
@Bean
public SimpleMessageListenerContainer serviceListenerContainer(
ConnectionFactory connectionFactory) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueues(greeting());
container.setMessageListener(receiver());
return container;
}
を返信するが、それはでクラッシュ:java.lang.IllegalStateException:
によって引き起こさRabbitTemplateが MessageListenerのように構成されていません - 'を使用することはできませんreplyAddress':
:reply_exchangeは/ドキュメントは言う返信
バージョン1.5以降、RabbitTemplateは応答を受信するMessageListenerとして構成されているかどうかを検出します。そうでない場合、返信アドレスでメッセージを送受信する試みは、(応答が受信されないため)IllegalStateExceptionで失敗します。
これは優れていますが、RabbitTemplateはそれをどのようにしていますか? MessageListenerとして設定されている場合、どのように検出されますか?事前に
おかげ
PS:コード送信:返信用コンテナが開始
public void send() {
Message message = MessageBuilder.withBody("Payload".getBytes())
.setContentType("text/plain")
.build();
Message reply = this.template.sendAndReceive(message);
System.out.println("Reply from server is: "+new String(reply.getBody()));
}