小编Bre*_*dan的帖子

在Akka的执着演员中,创造一个被认为是副作用的儿童演员,还是创造国家?

这个问题并不像标题所暗示的那样具有哲学性.考虑以下持久性方法:

执行操作的命令来自各种客户端.我将操作和客户都表示为持久的角色.客户端的状态是要通过的lastOperationId.Operation的状态几乎是操作进度的FSM(它实际上是一个Saga,因为它需要接触到ActorSystem外部的其他系统才能通过它的状态).

接收者接收操作命令,其包含客户端ID和操作ID.Reception actor创建或检索Client actor并将其转发给命令.Client actor读取并验证操作命令,持久化它,创建OperationReceived事件,使用此操作id更新其自己的状态.现在需要创建一个新的Operation actor来管理新的长期运行操作.但这里是我迷路的地方,文档和各种博客中的所有好例子都无济于事.大多数评论员说PersistentActor将命令转换为事件,然后更新其状态.只要在重放期间不调用它们,它们也可能具有副作用.所以我有两个困惑的领域:

  1. 在此上下文中创建操作actor是否等同于创建状态或执行副作用?它似乎不是副作用,但同时它不会改变自己的状态,而是导致新孩子的状态改变.
  2. 我是否应该构建一个Command来发送给新的Operation actor,或者我只是将它转发给OperationReceived事件?

如果我假设创建一个儿童演员不是副作用,那就意味着我还必须在重播时创建一个孩子.这反过来会导致孩子的状态得以恢复.

我希望潜在的问题是明确的.我觉得这是一个普遍的问题,但我能够制定它的最好方法是给出一个具体的例子.

编辑:经过反思,我认为从另一个创建一个持久的演员是一种创造国家的行为,虽然是外包的.这意味着触发创建的事件将在后续重放时触发该创建(这将导致检索子项自己的持久状态).这使我认为传递事件(而不是包装命令)可能是最干净的事情,因为可以应用相同的事件来更新父和子中的状态.当事件进入孩子时,应该没有必要坚持这个事件 - 它已经存在于父母身上并将重播.

persistence actor akka

7
推荐指数
1
解决办法
784
查看次数

持久性的唯一性在akka-persistence中

我正在使用scala api for akka-persistence来持久化一组组织成树的actor实例.树中的每个节点都是持久性actor,并根据"根"节点到该节点的路径命名.persistenceId设置为名称.例如,根节点actor具有persistenceId'root'.下一个节点有persistenceId'root-europe'.另一个演员可能有persistenceId'root-europe-italy'.

每个参与者的状态包括其子女的名字列表.例如,"root"演员将"欧洲","亚洲"等列表作为其州的一部分.

我已经为这个系统实现了快照.当根被触发为快照时,它会这样做,然后告诉每个孩子也这样做.

快照恢复期间出现问题.当我使用persistenceId ='root'重新创建一个actor时(通过将名称作为构造函数参数传递),该actor接收的SnapshotOffer事件是错误的.例如,它是'root-europe-italy ....'.这似乎是持久性合同的矛盾,其中persistenceId标识要恢复的actor状态.我通过反转节点actor的persistenceId来解决这个问题(例如'italy-europe-root'),所以这似乎与持久性模块检索文件的方式有关.请注意,我首先尝试了其他方法,例如,我在节点名称之间使用了各种分隔符,或者根本没有使用分隔符.

有没有其他人遇到过这个问题,或者akka-persistence开发人员可以帮助我理解为什么会发生这种情况?

BTW:我现在正在使用内置的基于文件的快照存储.

谢谢.

scala akka akka-persistence

6
推荐指数
1
解决办法
832
查看次数

在带有Bitmap的LayerDrawable上使用setLayerInset会产生意外结果

我正在使用LayerDrawable动态地在小位图图像上放置小点位图('热点').索引0处的图层包含大图像.根据大图像的百分比,向我指定图像上的点位置.例如,我可能有一个热点,应该是左边50%,大底部图像顶部75%.为了将点定位在图像的正确部分上,我正在使用

setLayerInset(layer, leftOffset, topOffset, rightOffset, bottomOffset)
Run Code Online (Sandbox Code Playgroud)

并根据包含LayerDrawable的ImageView的宽度和高度计算偏移量.我很高兴计算是正确的,并且正在检索正确的高度和宽度,并期望正确显示点,但它们不是.这些点沿着Y轴倾斜,它们的位置不正确(太高,太靠左).有没有人遇到类似的问题,并找到了解决方案?

android android-drawable

4
推荐指数
1
解决办法
3796
查看次数