英文:
How to get reference to remote ProducerController in Akka.NET's Akka.Delivery?
问题
我正在尝试使用Akka.Delivery在本地生产者进程和远程消费者进程之间实现精确一次交付。根据这篇文章,我需要将消费者控制器注册到生产者控制器。我已经配置了两个项目并正确设置了一切。然而,我在注册过程中遇到了问题。
以下是文章中的代码块:
private IActorRef CreateConsumerController()
{
var consumerControllerSettings = ConsumerController.Settings.Create(Context.System);
var consumerControllerProps = ConsumerController.Create<IMessageProtocol>(Context, Option<IActorRef>.None, consumerControllerSettings);
var consumerController = Context.ActorOf(consumerControllerProps, "consumer-controller");
consumerController.Tell(new ConsumerController.Start<IMessageProtocol>(Self));
consumerController.Tell(new ConsumerController.RegisterToProducerController<IMessageProtocol>(_producerController));
return consumerController;
}
我需要帮助确保生产者控制器与消费者控制器正确注册,或者反之。如何实际获取到位于远程进程中的producerController的引用。
英文:
I am attempting to implement exactly-once delivery using Akka.Delivery between a local producer process and a remote consumer process. According to this article, I need to register the consumer controller with the producer controller. I have configured both projects and set everything up correctly. However, I am having issues with the registration process.
Here is the code block from the article:
private IActorRef CreateConsumerController()
{
var consumerControllerSettings = ConsumerController.Settings.Create(Context.System);
var consumerControllerProps = ConsumerController.Create<IMessageProtocol>(Context, Option<IActorRef>.None, consumerControllerSettings);
var consumerController = Context.ActorOf(consumerControllerProps, "consumer-controller");
consumerController.Tell(new ConsumerController.Start<IMessageProtocol>(Self));
consumerController.Tell(new ConsumerController.RegisterToProducerController<IMessageProtocol>(_producerController));
return consumerController;
}
I need help ensuring that the producer controller is properly registered with the consumer controller, or vice versa. How to actually get reference to producerController which is in remote process.
答案1
得分: 1
你需要首先在生产者和消费者之间建立一个Akka.Remote连接,以便获取对ProducerController
的引用。
在Akka.Cluster中,您可以通过形成一个集群然后构建一个ActorSelection
到ProducerController
来实现这一点:
var pcPath = "/user/producerController"; // 将此替换为您的ProducerController在层次结构中的位置
IActorRef producerControllerReference = await myActorSystem.ActorSelection(remoteMember.Address + pcPath).ResolveOne(CancellationToken.None);
^^ 我是凭记忆打的这段代码,所以不要指望它可以编译,但基本是正确的。
如果您不使用Akka.Cluster,您需要手动提供一个Address
,可以是Address
对象或字符串形式,并运行完全相同类型的代码。
英文:
You'll need to establish an Akka.Remote connection between the producer and consumer first in order to get a reference to the ProducerController
.
In Akka.Cluster you could do this by just forming a cluster together and then constructing an ActorSelection
to the ProducerController
:
var pcPath = "/user/producerController"; // replace this with wherever your ProducerController is in the hierarchy
IActorRef producerControllerReference = await myActorSystem.ActorSelection(remoteMember.Address + pcPath).ResolveOne(CancellationToken.None);
^^ I'm typing this from memory so don't expect that to compile, but that's generally right.
If you're not using Akka.Cluster, you'll need to manually provide an Address
in either Address
or string
form and run the exact same type of code.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论