数据传输

1016 发布于: 2021-03-24 读完约需 2 分钟

ITransport可以被看作是Elasticsearch.NetNEST这两个客户端类库的发动机。虽然它的接口非常简单,但它最终负责将客户端调用转换为响应。

如果由于某些原因,Elasticsearch官方的ITransport内部实现方式不能满足你的使用需求,你可以通过实现自定义的ITransport,引入自己的传输实现。

Transport是实现了IConnectionConfigurationValues接口的泛型类型,这是客户端运行所需的最小ITransport单元。

在低阶的客户端(ElasticLowLevelClient)中,一个Transport像这样被实例化:

var lowLevelTransport = new Transport<ConnectionConfiguration>(new ConnectionConfiguration());

而在ElasticClient在,实例方式如下:

var highlevelTransport = new Transport<ConnectionSettings>(new ConnectionSettings());

var connectionPool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
var inMemoryTransport = new Transport<ConnectionSettings>(
    new ConnectionSettings(connectionPool, new InMemoryConnection()));

ITransport接口仅有的两个方法为Request()和RequestAsync(),默认的ITransport实现负责在客户端中引入许多构建块,如果你觉得默认的实现不能满足你的需求,同样的,你可以实现根据实际需要实现自己的ITransport,如:

var response = inMemoryTransport.Request<SearchResponse<Project>>(
    HttpMethod.GET,
    "/_search",
    PostData.Serializable(new { query = new { match_all = new { } } }));

response = await inMemoryTransport.RequestAsync<SearchResponse<Project>>(
    HttpMethod.GET,
    "/_search",
    default(CancellationToken),
    PostData.Serializable(new { query = new { match_all = new { } } }));

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

发表评论

登录用户才能发表评论, 请 登 录 或者 注册