spring rabbitmq получить все ответы на сообщение о перевоспитании

Я просто прочитал довольно интересное объяснение различий между ними и растущее предпочтение прикреплять модели к контроллеру и псевдоним контроллера для привязки моделей к представлению. http://toddmotto.com/digging-into-angulars-controller-as-syntax/ - статья. Он не упоминает об этом, но при определении директив, если вам нужно поделиться чем-то между несколькими директивами и не хотеть службы (есть законные случаи, когда услуги - это хлопот), тогда прикрепите данные к контроллеру родительской директивы. Служба $ scope предоставляет множество полезных вещей, $ watch является наиболее очевидным, но если все, что вам нужно, привязать данные к представлению, используя простой контроллер и «контроллер как» в шаблоне, отлично и, возможно, предпочтительнее.

0
задан Ben 15 January 2019 в 22:38
поделиться

1 ответ

Методы (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
0
ответ дан Gary Russell 15 January 2019 в 22:38
поделиться
Другие вопросы по тегам:

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