我尝试使用apache flink有状态函数来实现消息传递场景。我的一个状态可以通过提供给matchbinder的两个不同函数进行更新。这两个函数基本上检查当前状态并相应地更新状态。如果对同一个键同时调用这两个函数,会发生什么情况?对于为同一个键调用的有状态函数是否有队列机制?我们可以为顺序访问锁定状态访问/更新吗?
9lowa7mx1#
如果对同一个键同时调用这两个函数,会发生什么情况?matchbinder基本上是编写单个statefun函数的一种方便方法,它首先匹配传入消息的类型(或属性)来开始执行。它基本上是避免编写这样的代码的一种方法:
... if (message instanceof A) { handleA((A) message); } else if (message instanceof B) { handleB((B) message); } ...
所以实际上,尽管您为每个绑定案例提供了“不同”的java函数,但调用的是同一个statefun函数,将选择正确的绑定案例。对于为同一个键调用的有状态函数是否有队列机制?是的,statefun函数将按地址顺序调用。当函数应用于特定地址时,不会同时应用该地址的其他消息。这几乎是免费的,这要感谢apache flink作为实际的运行时。我们可以为顺序访问锁定状态访问/更新吗?每个地址的状态访问和修改是原子的和顺序的。
1条答案
按热度按时间9lowa7mx1#
如果对同一个键同时调用这两个函数,会发生什么情况?
matchbinder基本上是编写单个statefun函数的一种方便方法,它首先匹配传入消息的类型(或属性)来开始执行。它基本上是避免编写这样的代码的一种方法:
所以实际上,尽管您为每个绑定案例提供了“不同”的java函数,但调用的是同一个statefun函数,将选择正确的绑定案例。
对于为同一个键调用的有状态函数是否有队列机制?
是的,statefun函数将按地址顺序调用。当函数应用于特定地址时,不会同时应用该地址的其他消息。这几乎是免费的,这要感谢apache flink作为实际的运行时。
我们可以为顺序访问锁定状态访问/更新吗?
每个地址的状态访问和修改是原子的和顺序的。