Azure Servicebus BrokeredMessage

时间:2016-08-02 22:27:13

标签: azure azureservicebus

我遇到一种情况,我从总线收到一条消息,并且(由于遗留代码)执行的代码可能需要10分钟才能运行(请不要打扰我这是所有第三方WCF呼叫)。

这里的问题是消息锁定不能超过5分钟我想(并且有充分的理由)所以,我正在考虑获取消息,对其进行反序列化,检查它是否会长时间运行,如果是这样,用Completed方法将其标记为“已完成”。

现在,客户的内部发挥作用。为了避免线程饥饿,我不想:

  1. 接收消息(让我们称之为客户端线程)
  2. 在客户端主题
  3. 中标记了消息Completed
  4. 启动一个单独的线程来处理我的慢逻辑
  5. 让客户端线程退出,因为这里没有什么可做的
  6. 随着越来越多的消息到达处理,这显然会导致线程饥饿。

    所以我想知道的是,如果发生以下情况

    1. 接收消息(让我们称之为客户端线程)
    2. 在客户端主题
    3. 中标记了消息Completed
    4. 在客户端线程中处理我的慢逻辑
    5. 让客户端线程退出,因为这里没有什么可做的
    6. 这似乎是合乎逻辑的,但有人知道,当我说这条消息是library(data.table) setDT(df)[,.(day_time = max(Day_and_Time), rain1_sum=sum(rain1), rain2_sum=sum(rain2)), by=.(floor(as.numeric(Day_and_Time)/360))] floor day_time rain1_sum rain2_sum 1: 3516540 2010-02-12 01:05:00 0.19 0.10 2: 3516541 2010-02-12 01:10:00 0.43 0.21 时,下一条消息是否会到达,或者客户端是否会等待此客户端线程退出(即使消息标记为df <- structure(list(Day_and_Time = structure(c(1265954400, 1265954460, 1265954520, 1265954580, 1265954640, 1265954700, 1265954760, 1265954820, 1265954880, 1265954940, 1265955000), class = c("POSIXct", "POSIXt" ), tzone = ""), rain1 = c(0.03, 0.03, 0.01, 0.05, 0.03, 0.04, 0.02, 0.1, 0.3, 0.01, 0), rain2 = c(0, 0, 0, 0, 0.1, 0, 0.1, 0.1, 0, 0, 0.01)), .Names = c("Day_and_Time", "rain1", "rain2" ), row.names = c(NA, -11L), class = c("data.table", "data.frame" ), .internal.selfref = <pointer: 0x0000000000240788>) 现在可以被认为是在处理下一个消息之前没有处理消息吗?

0 个答案:

没有答案