2015-12-21 73 views
0

我有使與SQS郵件到我的本地數據庫的簡單路徑:示例語法油門

class DlrSqsToDb extends RouteBuilder { 
    """aws-sqs://123467890/test-queue?amazonSQSClient=%23awsSqsClient&amazonSQSEndpoint=https://sqs.eu-west-1.amazonaws.com""" ==> { 
    setHeader("dlr_body", body) 
    setHeader("msgid", "someid") 
    to("sql:insert into camel_test (msgid, dlr_body) VALUES (:#msgid,:#dlr_body)?dataSource=dataSource") 
    } 
} 

我想扼殺這讓SQS處理峯值,但讓我的本地數據庫負載是有限的。我可以做,例如延遲(),而不是油門():

.... 
"""aws-sqs://123467890/test-queue?amazonSQSClient=%23awsSqsClient&amazonSQSEndpoint=https://sqs.eu-west-1.amazonaws.com""" ==> { 
delay(3000) 
.... 

的作品,但

.... 
"""aws-sqs://123467890/test-queue?amazonSQSClient=%23awsSqsClient&amazonSQSEndpoint=https://sqs.eu-west-1.amazonaws.com""" ==> { 
throttle(1) 
.... 

不能編譯:

[error] found : Int(1) 
[error] required: org.apache.camel.scala.Frequency 
[error]  throttle(1) 

.... 
"""aws-sqs://123467890/test-queue?amazonSQSClient=%23awsSqsClient&amazonSQSEndpoint=https://sqs.eu-west-1.amazonaws.com""" ==> { 
throttle(new org.apache.camel.scala.Frequency(1,3000)) 
.... 

編譯但崩潰的錯誤:

.... because of Definition has no children on Throttle[{1} request per 3000 millis -> []] 

在scala中使用節流閥的正確語法是什麼?

回答

1

嘗試包裹下一個「爲」在節流塊,像這樣:

"""aws-sqs://123467890/test-queue?amazonSQSClient=%23awsSqsClient&amazonSQSEndpoint=https://sqs.eu-west-1.amazonaws.com""" ==> { 
     setHeader("dlr_body", body) 
     setHeader("msgid", "someid") 
     throttle(1 per (3 seconds)) { 
     to("sql:insert into camel_test (msgid, dlr_body) VALUES (:#msgid,:#dlr_body)?dataSource=dataSource") 
     } 
    } 

這是未經測試,但我懷疑這是因爲你需要明確有關使最後的塊語法'給'一個油門的孩子。令人遺憾的是,我發現駱駝scala dsl對陳述的順序非常挑剔,但對實際編譯的內容卻非常鬆懈。

+0

它導致正確的解決方案,謝謝! – FelixHJ