![](/img/trans.png)
[英]Dapr GRPC connection Refused while getting state using .net DaprClient
[英]How to get all entries using query state with Dapr?
我在 Dapr 中使用 state 商店来保存和从 Redis 使用 .NET 客户端获取项目,它工作正常。 现在我需要使用查询 state 获取所有条目。 我尝试了不同的 forms 查询:
var query1 = """
{
"filter": {}
}
""";
var query2 = """
"filter": {}
""";
var query3 = "{}";
var queryResult = await daprClient.QueryStateAsync<Product>("statestore", query, cancellationToken: ct);
但是我经常failed query in state store statestore: query index not found
:
Dapr.DaprException: Query state operation failed: the Dapr endpointed indicated a failure. See InnerException for details.
---> Grpc.Core.RpcException: Status(StatusCode="Internal", Detail="failed query in state store statestore: query index not found")
at Dapr.Client.DaprClientGrpc.QueryStateAsync[TValue](String storeName, String jsonQuery, IReadOnlyDictionary`2 metadata, CancellationToken cancellationToken)
查询的正确形式是什么? 还是我需要初始化商店? 我在文档中没有找到任何关于此的内容。
您首先需要运行启用了 2 个模块的 Redis 版本:
这可以通过使用此docker
命令来完成:
docker run --name redis2 -d -p 6380:6379 redislabs/redismod
接下来,将查询索引添加到您的 Dapr 配置中,如此处所述。
例子:
metadata:
- name: redisHost
value: "localhost:6380"
- name: queryIndexes
value: |
[
{
"name": "orgIndx",
"indexes": [
{
"key": "person.org",
"type": "TEXT"
},
{
"key": "state",
"type": "TEXT"
}
]
}
]
最后,在您的查询中,添加元数据以指示应将哪个索引用于该特定查询,如下所示:
Dictionary<string, string> metadata = new() { "contentType", "application/json" }, { "queryIndexName", "orgIndx" } };
var queryResult = await daprClient.QueryStateAsync<Product>("statestore", query, cancellationToken: ct, metadata: metadata);
确保在写入操作期间至少传递contentType
元数据。
完成后,您的查询将起作用。 密切关注这个GH 问题并点赞,因为这显然不是一个很好的开发人员体验 ootb。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.