Mar*_*tin 2 java spring spring-amqp
我使用Spring AMQP设置不同的服务之间的远程调用,描述在这里。然而,当我reply-timeout在我的配置上设置 a时,第一个请求总是失败,因为声明队列、交换和绑定所花费的时间超过了超时:
RabbitAdmin 组件可以在启动时声明交换、队列和绑定。它通过 ConnectionListener 懒惰地执行此操作,因此如果代理在启动时不存在,则无关紧要。第一次使用连接(例如通过发送消息)时,侦听器将被触发并应用管理功能。
有什么方法可以在启动时急切地进行声明,而不是在第一个发布事件上进行声明,以防止第一个请求总是失败?
如果您使用注释声明队列:
@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)
| 归档时间: |
|
| 查看次数: |
4426 次 |
| 最近记录: |