首页 > 解决方案 > 服务远程处理/发送者 - 接收者

问题描述

我希望我的无状态服务(发送者)通过服务远程处理将对象发送到有状态的服务(接收者)。我只找到状态服务(接收器)创建代理并等待来自发送者的消息的方式。

ISenderService senderClient = ServiceProxy.Create<ISenderService>(new Uri("fabric:/MyApplication/SenderService"));

string message = await senderClient.MessageAsync();

这不是我想要的。我希望无状态服务(sender)创建有状态服务的代理,发送消息,而有状态服务(接收器)在收到消息时进行侦听并执行某些操作。

我怎样才能做到这一点 ?我没有找到有关此案例的任何文档或示例。

编辑:

如果我很好理解,服务 A(无状态)创建代理来调用服务 B(有状态)功能。

标签: c#microserviceslistenerazure-service-fabricservice-fabric-stateless

解决方案


你在正确的轨道上。

  1. 确定要与之交互的分区的分区键。
  2. 使用该信息创建服务代理
  3. 调用服务
long partitionKey = DeterminePartitionAddressFromContext();
var proxy = _serviceProxyFactory.CreateServiceProxy<ISenderService>(new Uri("fabric:/MyApplication/SenderService"), new ServicePartitionKey(partitionKey), TargetReplicaSelector.PrimaryReplica, RemotingListenerName);
await proxy.MessageAsync();

此示例中的更多信息,其中无状态服务使用 SF 远程调用有状态服务。

示例中的分区基于使用输入对象的散列,该散列将返回一个 int64 数字,该数字可用于寻址 Int64RangePartition。您可能会在有状态服务中做类似的事情。有关示例和分区策略的更多信息,请参阅此视频


推荐阅读