Методы (convertS|s)endAndReceive.*()
не предназначены для обработки нескольких ответов; это строго один метод запроса / одного ответа.
Вам потребуется использовать метод (convertAndS|s)end()
для отправки запроса и реализовать свой собственный механизм ответа, возможно, используя контейнер слушателя для ответов, вместе с некоторым компонентом для агрегирования ответов.
Вы можете использовать что-то вроде Spring Integration Aggregator для этого, но вам потребуется какой-то механизм (ReleaseStrategy
), который бы знал, когда будут получены все ожидаемые ответы.
Или вы можете просто получать отдельные ответы и обрабатывать их индивидуально.
РЕДАКТИРОВАТЬ
@SpringBootApplication
public class So54207780Application {
public static void main(String[] args) {
SpringApplication.run(So54207780Application.class, args);
}
@Bean
public ApplicationRunner runner(RabbitTemplate template) {
return args -> template.convertAndSend("fanout", "", "foo", m -> {
m.getMessageProperties().setReplyTo("replies");
return m;
});
}
@RabbitListener(queues = "queue1")
public String listen1(String in) {
return in.toUpperCase();
}
@RabbitListener(queues = "queue2")
public String listen2(String in) {
return in + in;
}
@RabbitListener(queues = "replies")
public void replyHandler(String reply) {
System.out.println(reply);
}
@Bean
public FanoutExchange fanout() {
return new FanoutExchange("fanout");
}
@Bean
public Queue queue1() {
return new Queue("queue1");
}
@Bean
public Binding binding1() {
return BindingBuilder.bind(queue1()).to(fanout());
}
@Bean
public Queue queue2() {
return new Queue("queue2");
}
@Bean
public Binding binding2() {
return BindingBuilder.bind(queue2()).to(fanout());
}
@Bean
public Queue replies() {
return new Queue("replies");
}
}
и
FOO
foofoo
Хм, это, кажется, работает на меня. Какую версию Clojure Вы используете и как Вы называете считанными из подсказки? Вот то, что я возвращаю (здесь goo
мой ответ):
user=> (defn prompt-read [prompt]
(print (format "%s: " prompt))
(flush )
(read-line))
#'user/prompt-read
user=> (prompt-read "foo")
foo: goo
"goo"
The read-line problem was a known bug. It was fixed. Update your Clojure version.