2016-09-17 58 views
0

我正在嘗試使用RabbitMQ配置簡單的Spring雲流應用程序。我使用的代碼大多取自spring-cloud-stream-samples。 我有一個入口點:Spring雲流不會創建隊列

@SpringBootApplication 
public class DemoApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(DemoApplication.class, args); 
    } 
} 

,並從例如簡單的消息生產者:

@EnableBinding(Source.class) 
public class SourceModuleDefinition { 

    private String format = "yyyy-MM-dd HH:mm:ss"; 

    @Bean 
    @InboundChannelAdapter(value = Source.OUTPUT, poller = @Poller(fixedDelay = "${fixedDelay}", maxMessagesPerPoll = "1")) 
    public MessageSource<String> timerMessageSource() { 
     return() -> new GenericMessage<>(new SimpleDateFormat(this.format).format(new Date())); 
    } 

} 

另外,這裏是application.yml配置:

fixedDelay: 5000 
spring: 
    cloud: 
    stream: 
     bindings: 
     output: 
      destination: test 

當運行例如,它連接到Rabbit並創建一個名爲test的交換。但我的問題是,它不會自動創建隊列和綁定。我可以看到兔子的流量,但是我的所有消息都沒有了。雖然我需要他們留在隊列中,除非他們被消費者閱讀。

也許我誤解了一些東西,但是從我讀的所有主題看來,Spring Cloud Stream應該自動創建一個隊列和一個綁定。如果沒有,我該如何配置它,以便我的消息被保存?

我使用Spring Cloud Brixton.SR5和Spring Boot 1.4.0.RELEASE。

回答

2

只要啓動消費者應用程序,就會創建一個隊列。

在Rabbit MQ的情況下,我們爲每個使用者組分別擁有不同的隊列,並且我們無法事先知道所有組,如果您希望爲預先知道的使用者組自動創建隊列,則可以使用​​生產者的財產。這將確保消息持續到該組中的消費者啓動爲止。

查看詳情這裏:http://docs.spring.io/spring-cloud-stream/docs/Brooklyn.BUILD-SNAPSHOT/reference/htmlsingle/#_producer_properties

+0

是的,它的作品!謝謝。 – FVlad