服务远程处理/发送方 - 接收方

Service remoting / sender - receiver

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

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

string message = await senderClient.MessageAsync();

这不是我想要的。我想要无状态服务 (sender) 为有状态的服务创建代理,发送消息,有状态的服务 (receiver) 监听并在接收到消息时做一些事情一条消息。

我该怎么做?我没有找到有关此案例的任何文档或示例。

编辑:

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

你走在正确的轨道上。

  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();

this example 中的更多信息,其中无状态服务使用 SF 远程处理调用有状态服务。

示例中的分区是基于使用输入对象的hash,它将return一个int64数字,可用于寻址一个Int64RangePartition。您可能会在有状态服务中做类似的事情。 有关示例和分区策略的更多信息,请参阅 this video