throttle 的语法示例
Example for syntax for throttle
我有一个将消息从 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 处理峰值,但我的本地数据库上的负载是有限的。例如,我可以执行 delay(),但不能执行 throttle():
....
"""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 中使用 throttle 的正确语法是什么?
尝试像这样将下一个 'to' 包裹在油门块中:
"""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")
}
}
这是未经测试的,但我怀疑这是因为块语法,你需要明确地使最后的 'to' 成为节流阀的 child。可悲的是,我发现 camels scala dsl 对语句的顺序非常挑剔,但对实际编译的内容却非常松懈。
我有一个将消息从 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 处理峰值,但我的本地数据库上的负载是有限的。例如,我可以执行 delay(),但不能执行 throttle():
....
"""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 中使用 throttle 的正确语法是什么?
尝试像这样将下一个 'to' 包裹在油门块中:
"""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")
}
}
这是未经测试的,但我怀疑这是因为块语法,你需要明确地使最后的 'to' 成为节流阀的 child。可悲的是,我发现 camels scala dsl 对语句的顺序非常挑剔,但对实际编译的内容却非常松懈。