Проблема функции строки чтения Clojure

Методы (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
5
задан Rayne 3 February 2009 в 22:48
поделиться

2 ответа

Хм, это, кажется, работает на меня. Какую версию Clojure Вы используете и как Вы называете считанными из подсказки? Вот то, что я возвращаю (здесь goo мой ответ):

user=> (defn prompt-read [prompt]
(print (format "%s: " prompt))
(flush )
(read-line))
#'user/prompt-read
user=> (prompt-read "foo")
foo: goo
"goo"
3
ответ дан 15 December 2019 в 01:12
поделиться

The read-line problem was a known bug. It was fixed. Update your Clojure version.

1
ответ дан 15 December 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: