【发布时间】:2018-09-26 01:00:18
【问题描述】:
我正在尝试创建一个扇出交换,每个人都会在其中接收来自发布者的消息。我的问题是,在队列中发布的消息无法被侦听器拾取。设置的队列都是随应用程序实例而死的匿名队列。发布者和订阅者在同一个应用程序中。非常感谢任何帮助。
队列配置:
@Value("${apcp.rabbitmq.refresh-exchange}")
private String fanoutExchangeName;
@Autowired
Queue anonQueue;
@Bean("amqp-admin")
@PostConstruct
public AmqpAdmin AMQPAdmin(){
log.info(connectionFactory.toString());
AmqpAdmin amqpAdmin = new RabbitAdmin(connectionFactory);
return amqpAdmin;
}
@Bean
@PostConstruct
public String initRefreshAmqp(){
setupFanOutExchange();
return "";
}
public void setupFanOutExchange(){
AmqpAdmin amqpAdmin = new RabbitAdmin(connectionFactory);
FanoutExchange exchange = new FanoutExchange(fanoutExchangeName);
amqpAdmin.declareExchange(exchange);
Queue queue = new Queue(anonQueue, false, true, true);
amqpAdmin.declareQueue(queue);
amqpAdmin.declareBinding(BindingBuilder.bind(queue).to(exchange));
}
出版商
@RequestMapping(value = "/publish")
public String publish(String message){
rabbitTemplate.convertAndSend(exchangeName, message);
return "";
}
订阅者配置
@Bean
@PostConstruct
public SimpleRabbitListenerContainerFactory listenerFactory() {
log.info("CONNECTIONS:"+connectionFactory.toString());
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setMessageConverter(jsonMessageConverter());
return factory;
}
订阅者监听器
@RabbitListener(queues = "#{anonQueue.name}", containerFactory = "listenerFactory")
public void receiverQueue(String message){
log.info(message);
}
【问题讨论】:
-
每个听众有一个队列吗?对我来说,您需要的似乎更像是一种发布/订阅风格的通信。
标签: java spring spring-boot rabbitmq spring-rabbit