服务远程处理/发送方 - 接收方
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(有状态)功能。
你走在正确的轨道上。
- 确定要与之交互的分区的分区键。
- 使用该信息创建服务代理
- 调用服务
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。
我希望我的无状态服务 (sender) 通过服务远程处理将对象发送到有状态服务 (receiver)。 我只找到有状态服务 (receiver) 创建代理并等待来自发件人的消息的方式。
ISenderService senderClient = ServiceProxy.Create<ISenderService>(new Uri("fabric:/MyApplication/SenderService"));
string message = await senderClient.MessageAsync();
这不是我想要的。我想要无状态服务 (sender) 为有状态的服务创建代理,发送消息,有状态的服务 (receiver) 监听并在接收到消息时做一些事情一条消息。
我该怎么做?我没有找到有关此案例的任何文档或示例。
编辑:
如果我很好理解,服务A(无状态)创建代理来调用服务B(有状态)功能。
你走在正确的轨道上。
- 确定要与之交互的分区的分区键。
- 使用该信息创建服务代理
- 调用服务
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。