RabbitAdmin - 热切宣言

Mar*_*tin 2 java spring spring-amqp

我使用Spring AMQP设置不同的服务之间的远程调用,描述在这里。然而,当我reply-timeout在我的配置上设置 a时,第一个请求总是失败,因为声明队列、交换和绑定所花费的时间超过了超时:

RabbitAdmin 组件可以在启动时声明交换、队列和绑定。它通过 ConnectionListener 懒惰地执行此操作,因此如果代理在启动时不存在,则无关紧要。第一次使用连接(例如通过发送消息)时,侦听器将被触发并应用管理功能。

有什么方法可以在启动时急切地进行声明,而不是在第一个发布事件上进行声明,以防止第一个请求总是失败?

Ale*_*isi 6

如果您使用注释声明队列:

@Configuration
public class QueuesConfiguration {

    @Bean
    public FanoutExchange exchange() {
        return new FanoutExchange("exchange", true, false);
    }

    @Bean
    public Binding binding() {
        return BindingBuilder.bind(queue()).to(exchange());
    }

    @Bean
    public Queue queue() {
        return new Queue("queue");
    }

    @Bean
    public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
        return new RabbitAdmin(connectionFactory);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后RabbitAdmin.initialize()在应用程序启动时手动调用:

@Component
public class ApplicationStartup implements ApplicationListener<ApplicationReadyEvent> {

    @Autowired
    private RabbitAdmin rabbitAdmin;

    @Override
    public void onApplicationEvent(final ApplicationReadyEvent event) {

        rabbitAdmin.initialize();
    }
}
Run Code Online (Sandbox Code Playgroud)