2017-08-30 168 views
0

我想創建從rabbitMQ plugin延遲交換。SpringCloudStream - 如何創建延遲交換?

起初,我試圖用簧粘合劑,因爲我可以看到,delayed-exchange標誌可用:

spring: 
    cloud: 
    stream:    
     bindings: 
     delayed-ex: 
      group: update-delayed 
      contentType: application/json 
      consumer: 
      max-attempts: 1 
     rabbit: 
     bindings: 
      delayed-ex: 
      consumer: 
       transacted: true 
       auto-bind-dlq: true 
       republish-to-dlq: true 
       delayed-exchange: true 
       requeue-rejected: false 

不幸的是,這個配置是創造我不帶任何標誌簡單topic交流。

我可以創造豆:

@Bean 
public CustomExchange delayedExchange() { 
    final Map<String, Object> args = new HashMap<>(); 
    args.put("x-delayed-type", "topic");  
    return new CustomExchange("delayed-ex", "x-delayed-message", true, false, args); 
} 

而且它正在與當前的配置,但它給我蹤跡,對此,我要重寫現有的交流:COM:通過引起

.rabbitmq.client.ShutdownSignalException:通道錯誤;協議方法:#method(reply-code = 406,reply-text = PRECONDITION_FAILED - 在vhost'/'中交換'delayed-ex'的不等價參數'type':收到'topic',但是current是''x-delayed-message ',class-id = 40,method-id = 10)

另一件事(不知道是否是一個問題)我想讓消費者和生產者在同一個服務中,爲我的消息。

另外,我檢查了delayed-exchange標誌的來源,並看到這個標誌沒有做任何事情(我錯了嗎?),因爲方法從AbstractExchange不被調用。

是否可以申報類型爲x-delayed-message的延遲交換,並通過配置來完成,而不是聲明bean?此外,我想刪除堆棧跟蹤

回答

0

問題是與spring-rabbit依賴關係的錯誤版本。我使用1.5.6.RELEASE,它不使用isDelayed()方法。將其更改爲1.7.3.RELEASE版本可以解決問題。

我刪除我的自定義的bean創建此配置:

spring 
    cloud: 
    stream:    
     bindings: 
     delayed-ex: 
      group: update-delayed 
      contentType: application/json 
      consumer: 
      max-attempts: 1 
     rabbit: 
     bindings: 
      delayed-ex: 
      consumer: 
       transacted: true 
       auto-bind-dlq: true 
       republish-to-dlq: true 
       delayed-exchange: true 
       requeue-rejected: false  
      producer: 
       delayed-exchange: true 

現在,交換和隊列由配置自動創建的,沒有任何蹤跡。