【问题标题】:Service remoting / sender - receiver服务远程处理/发送者 - 接收者
【发布时间】:2020-09-11 21:59:42
【问题描述】:

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

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

string message = await senderClient.MessageAsync();

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

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

编辑:

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

【问题讨论】:

    标签: c# microservices listener azure-service-fabric service-fabric-stateless


    【解决方案1】:

    你在正确的轨道上。

    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,这将返回一个 int64 数字,可用于寻址 Int64RangePartition。您可能会在有状态服务中做类似的事情。 有关示例和分区策略的更多信息,请参阅this video

    【讨论】:

    • 谢谢。这个例子对我帮助很大。如何检索 partitionKey?
    • 我在答案中添加了更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多