我想编写基于Solace的并行执行模块。我为此使用request-reply模式。
我有:
我想拥有的东西:如果在消息上产生效果,则它不应接收任何其他消息。这非常重要,因为某些任务会阻塞执行程序几分钟,而其他任务则会阻塞执行程序几秒钟后可以免费使用。
下面的方案是可行的(可能),但是下面显示了阻止代码。我想避免这种情况。
while(true)
{
var inputMessage = flow.ReceiveMsg( /*timeout 1s*/1_000); // <--- blocking code, I'd like to avoid it
flow.Ack(inputMessage.ADMessageId);
var reply = await ProcessMessageAsync(inputMessage); // execute plus handle exceptions
session.SendReply(inputMessage, reply)
}
答案 0 :(得分:0)
仅将消息推送到使用中的应用程序。
话虽如此,通过将队列上的“ max-delivered-unacked-msgs-per-flow”设置为1,可以获得所需的行为。 这意味着绑定到队列的每个使用者仅允许有1条未确认的未确认消息。 下一条消息仅在确认该消息后才发送给使用者。
有关此功能的详细信息,请参见here。
请注意,您的代码段似乎无效。
IFlow.ReceiveMsg
仅在交易会话中使用,交易会话利用ITransactedSession.Commit
来确认消息。