遥控发送方-接收方服务

问题描述 投票:0回答:1

我希望我的无状态服务(发件人)发送一个对象给一个有状态的对象(接收器)通过服务远程.我只找到了全状态服务的方式(接收器)创建一个代理并等待发件人的消息。

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

string message = await senderClient.MessageAsync();

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

我怎样才能做到这一点?我没有找到任何关于这种情况的文档或例子。

EDIT.如果我理解的不错,服务A(无状态)创建代理来调用服务B(无状态)。

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

c# microservices listener azure-service-fabric service-fabric-stateless
1个回答
1
投票

你的方向是对的。

  1. 确定你要交互的分区的partitionkey。
  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。您可能会在您的有状态服务中做类似的事情。本视频 了解更多关于示例和分区策略的信息。

© www.soinside.com 2019 - 2024. All rights reserved.