簡體   English   中英

Spring-Boot AMQP 1.3.1.RELEASE-持久隊列

[英]Spring-Boot AMQP 1.3.1.RELEASE - Durable Queue

由於某種原因,即使我在Spring AMQP Queue配置中指定了該設置,我的隊列也沒有創建為持久性的:

@Bean
Queue queue() {
    //durable queue - true
    return new Queue(queueName, true);
}

我正在使用Spring AMQP連接到RabbitMQ,並在直接交換上偵聽該隊列。

@Bean
DirectExchange exchange() {
    return new DirectExchange(exchangeName);
}

@Bean
Binding binding(Queue queue, DirectExchange exchange) {
    return BindingBuilder.bind(queue).to(exchange).with(queueName);
}

@Bean
public ConnectionFactory connectionFactory() {

    CloudFactory cloudFactory = new CloudFactory();
    Cloud cloud = cloudFactory.getCloud();

    AmqpServiceInfo serviceInfo = (AmqpServiceInfo) 
            cloud.getServiceInfo(serviceName);

    CachingConnectionFactory connectionFactory =
        new CachingConnectionFactory(serviceInfo.getHost());
    connectionFactory.setUsername(serviceInfo.getUserName());
    connectionFactory.setPassword(serviceInfo.getPassword());
    connectionFactory.setVirtualHost(serviceInfo.getVirtualHost());
    return connectionFactory;
}

@Bean
MessageListenerAdapter underwritingMessageListener() throws Exception {
    return new MessageListenerAdapter(new UnderwritingMessageListener()) {{
        setDefaultListenerMethod("onMessage");
    }};
}

@Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory, 
        MessageListenerAdapter underwritingMessageListener) {
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.setQueueNames(queueName);
    container.setMessageListener(underwritingMessageListener);
    return container;
}

我是否缺少配置步驟?

該設置未生效,因為在部署上述代碼之前,該隊列已經存在,並且是非持久性的。 通過管理控制台或CLI刪除隊列,使應用程序可以將隊列聲明為持久隊列(重新啟動后)。

如果Spring-AMQP(RabbitMQ)在已經聲明為其他狀態的隊列中拋出異常,而不是進行無效的部署,將很有幫助。

您需要RabbitAdmin @Bean進行聲明。

它在連接工廠中注冊自己,並在建立連接時執行聲明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM