我有一个用例,一个集群中的一个分片需要向同一集群中的另一个分片询问一些信息。
我知道我可以通过执行以下操作来获取ShardRegion:
class Label(models.Model):
name = models.CharField(max_length=100)
slug = models.SlugField(max_length=100, editable=False)
def save(self, *args, **kwargs): # create slug from name when saving for the first time
if not self.slug:
self.slug = slugify(self.name)
super(Label, self).save(*args, **kwargs)
path('labels/<slug:label_slug>/', views.label, name='label')
def label(request, label_slug):
l = Label.objects.get(slug=label_slug)
…
然后像这样发出我的请求:
val counterRegion: ActorRef = ClusterSharding(system).shardRegion("Counter")
但是,是否有办法从分片本身获取分片区域actor ref?似乎这将是获取ActorRef的更干净,更有效的方法。
答案 0 :(得分:0)
您指定的方式是正确的方式。
可以在分片实体中调用context.parent
,并返回分片区域的ActorRef
。但这不是那么明确的选择,因为它取决于分片区域是分片实体的父级的事实。
我认为您应该继续使用您的选项。
此外,与您的问题无关,您不应在参与者中使用询问模式。它增加了处理Future的复杂性,并且需要指定超时。只需使用send / tell或!
。您可以在receive
部分函数中处理发回给actor的响应。