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