我希望我的无状态服务(发件人)发送一个对象给一个有状态的对象(接收器)通过服务远程.我只找到了全状态服务的方式(接收器)创建一个代理并等待发件人的消息。
ISenderService senderClient = ServiceProxy.Create<ISenderService>(new Uri("fabric:/MyApplication/SenderService"));
string message = await senderClient.MessageAsync();
这不是我想要的。我想要的是无状态服务 (发件人)创建代理到有状态的,发送消息,有状态的(接收器)在收到消息时,会监听并做一些事情。
我怎样才能做到这一点?我没有找到任何关于这种情况的文档或例子。
EDIT.如果我理解的不错,服务A(无状态)创建代理来调用服务B(无状态)。
如果我理解的很好,服务A(无状态)创建代理来调用服务B(有状态)的功能。
你的方向是对的。
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。您可能会在您的有状态服务中做类似的事情。本视频 了解更多关于示例和分区策略的信息。