/// <summary> /// 创建连接池 /// </summary> /// <param name="config"></param> /// <returns></returns> private IConnectionPool CreateConnectionPool(ElasticsearchConfig config) { var nodes = config.Nodes; switch (config.PoolType) { case ElasticsearchConnectionPoolType.Static: return(new StaticConnectionPool(nodes)); case ElasticsearchConnectionPoolType.SingleNode: return(new SingleNodeConnectionPool(nodes.FirstOrDefault())); case ElasticsearchConnectionPoolType.Sniffing: return(new SniffingConnectionPool(nodes)); case ElasticsearchConnectionPoolType.Sticky: return(new StickyConnectionPool(nodes)); case ElasticsearchConnectionPoolType.StickySniffing: return(new StickySniffingConnectionPool(nodes, x => 1.0F)); default: return(new StaticConnectionPool(nodes)); } }
/// <summary> /// 创建ES客户端 /// </summary> /// <param name="config">配置</param> /// <returns></returns> private IElasticClient CreateClient(ElasticsearchConfig config) { var connectionPool = CreateConnectionPool(config); var settings = new ConnectionSettings(connectionPool); ConfigSettings(settings, config); return(new ElasticClient(settings)); }
/// <summary> /// 注册Elasticsearch日志操作 /// </summary> /// <param name="services">服务集合</param> /// <param name="setupAction">配置操作</param> public static void AddElasticsearch(this IServiceCollection services, Action <ElasticsearchConfig> setupAction) { var config = new ElasticsearchConfig(); setupAction?.Invoke(config); services.TryAddSingleton <IElasticsearchConfigProvider>(new ElasticsearchConfigProvider(config)); services.TryAddScoped <IElasticsearchClient, ElasticsearchClient>(); }
public void Instantiate_ElasticsearchConnectionString_ElasticsearchExecutionEngine() { var config = new ElasticsearchConfig(); var clientProvider = new ClientProvider(config); var commandProvider = new CommandProvider(config); var factory = new ExecutionEngineFactory(clientProvider, commandProvider, config); var query = Mock.Of <IQuery> ( x => x.ConnectionString == $@"Hostname=localhost;port=9200;Username=admin;password=p@ssw0rd;api=Elasticsearch" && x.Statement == @"GET index/type/_search { ""query"": {""match_all"": { }} }" ); var engine = factory.Instantiate(query); Assert.That(engine, Is.Not.Null); Assert.That(engine, Is.TypeOf <ElasticsearchExecutionEngine>()); }
/// <summary> /// 配置连接设置 /// </summary> /// <param name="settings">连接设置</param> /// <param name="config">配置</param> private void ConfigSettings(ConnectionSettings settings, ElasticsearchConfig config) { // 启用验证 if (!string.IsNullOrWhiteSpace(config.UserName) && !string.IsNullOrWhiteSpace(config.Password)) { settings.BasicAuthentication(config.UserName, config.Password); } // 验证证书 //settings.ClientCertificate(""); //settings.ClientCertificates(new System.Security.Cryptography.X509Certificates.X509CertificateCollection()); //settings.ServerCertificateValidationCallback(); // 开启第一次使用时进行嗅探,需连接池支持 //settings.SniffOnStartup(false); // 链接最大并发数 //settings.ConnectionLimit(80); // 标记为死亡节点的超时时间 //settings.DeadTimeout(new TimeSpan(10000)); //settings.MaxDeadTimeout(new TimeSpan(10000)); // 最大重试次数 //settings.MaximumRetries(5); // 重试超时时间,默认是RequestTimeout //settings.MaxRetryTimeout(new TimeSpan(50000)); // 禁用代理自动检测 //settings.DisableAutomaticProxyDetection(true); // 禁用ping,第一次使用节点或使用被标记死亡的节点进行ping settings.DisablePing(config.DisablePing); // ping超时设置 //settings.PingTimeout(new TimeSpan(10000)); // 选择节点 //settings.NodePredicate(node => { return true; }); // 默认操作索引 //settings.DefaultIndex(""); // 字段名规则 与model字段同名 //settings.DefaultFieldNameInferrer(name => name); // 根据Type获取类型名 //settings.DefaultTypeNameInferrer(name => name.Name); // 请求超时设置 //settings.RequestTimeout(new TimeSpan(10000)); // 调试信息 settings.DisableDirectStreaming(config.DisableDebugInfo); //settings.EnableDebugMode((apiCallDetails) => //{ // // 请求完成 返回 apiCallDetails //}); // 抛出异常,默认false,错误信息在每个操作的response中 settings.ThrowExceptions(config.ThrowExceptions); //settings.OnRequestCompleted(apiCallDetails => //{ // // 请求完成 返回apiCallDetails //}); //settings.OnRequestDataCreated(requestData => //{ // // 请求的数据创建完成 返回请求的数据 //}); }
public static void Main(string[] args) { ElasticsearchConfig.ConfigureLogging(); CreateHost(args); }