c# - 服务远程处理/发送者 - 接收者
问题描述
我希望我的无状态服务(发送者)通过服务远程处理将对象发送到有状态的服务(接收者)。我只找到状态服务(接收器)创建代理并等待来自发送者的消息的方式。
ISenderService senderClient = ServiceProxy.Create<ISenderService>(new Uri("fabric:/MyApplication/SenderService"));
string message = await senderClient.MessageAsync();
这不是我想要的。我希望无状态服务(sender)创建有状态服务的代理,发送消息,而有状态服务(接收器)在收到消息时进行侦听并执行某些操作。
我怎样才能做到这一点 ?我没有找到有关此案例的任何文档或示例。
编辑:
如果我很好理解,服务 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。您可能会在有状态服务中做类似的事情。有关示例和分区策略的更多信息,请参阅此视频。
推荐阅读
- python-3.x - 我怎样才能松开单词之间的空格而不松开短语之间的空格
- regex - 用 Google BigQuery 中的文字替换正则表达式字符
- java - JDBC 不会从 SELECT 返回超过 21 亿条记录
- python - 如何从 qcombobox 获取 itemdata?
- c++ - 变量定义,初学者辅助
- mysql - Docker:无法启动 mysql
- r - 为什么在 R 中进行情绪分析(colSums + mutate_impl)时出现“'X' must be numeric'”错误?
- javascript - 从 json 响应正文中提取数据
- html - md-autocomplete 将结果显示为列表而不是下拉列表
- javascript - JQuery:单击单选按钮时如何在 HTML 中打印值?