- PHP Client: other versions:
- Overview
- Quickstart
- Installation
- Configuration
- Inline Host Configuration
- Extended Host Configuration
- Authorization and Encryption
- Set retries
- Enabling the Logger
- Configure the HTTP Handler
- Setting the Connection Pool
- Setting the Connection Selector
- Setting the Serializer
- Setting a custom ConnectionFactory
- Set the Endpoint closure
- Building the client from a configuration hash
- Per-request configuration
- Future Mode
- Dealing with JSON Arrays and Objects in PHP
- Index Management Operations
- Indexing Documents
- Getting Documents
- Updating Documents
- Deleting documents
- Search Operations
- Namespaces
- Security
- Connection Pool
- Selectors
- Serializers
- PHP Version Requirement
- Breaking changes from 5.x
- Community DSLs
- Community Integrations
- Reference - Endpoints
- Elasticsearch\Client
- Elasticsearch\ClientBuilder
- Elasticsearch\Namespaces\CatNamespace
- Elasticsearch\Namespaces\ClusterNamespace
- Elasticsearch\Namespaces\IndicesNamespace
- Elasticsearch\Namespaces\IngestNamespace
- Elasticsearch\Namespaces\NodesNamespace
- Elasticsearch\Namespaces\RemoteNamespace
- Elasticsearch\Namespaces\SnapshotNamespace
- Elasticsearch\Namespaces\TasksNamespace
Custom Connection Pool
editCustom Connection Pool
editIf you wish to implement your own custom Connection Pool, your class must implement ConnectionPoolInterface
:
class MyCustomConnectionPool implements ConnectionPoolInterface { /** * @param bool $force * * @return ConnectionInterface */ public function nextConnection($force = false) { // code here } /** * @return void */ public function scheduleCheck() { // code here } }
You can then instantiate an instance of your ConnectionPool and inject it into the ClientBuilder:
$myConnectionPool = new MyCustomConnectionPool(); $client = ClientBuilder::create() ->setConnectionPool($myConnectionPool, []) ->build();
If your connection pool only makes minor changes, you may consider extending AbstractConnectionPool
, which provides
some helper concrete methods. If you choose to go down this route, you need to make sure your ConnectionPool’s implementation
has a compatible constructor (since it is not defined in the interface):
class MyCustomConnectionPool extends AbstractConnectionPool implements ConnectionPoolInterface { public function __construct($connections, SelectorInterface $selector, ConnectionFactory $factory, $connectionPoolParams) { parent::__construct($connections, $selector, $factory, $connectionPoolParams); } /** * @param bool $force * * @return ConnectionInterface */ public function nextConnection($force = false) { // code here } /** * @return void */ public function scheduleCheck() { // code here } }
If your constructor matches AbstractConnectionPool, you may use either object injection or namespace instantiation:
$myConnectionPool = new MyCustomConnectionPool(); $client = ClientBuilder::create() ->setConnectionPool($myConnectionPool, []) // object injection ->setConnectionPool('/MyProject/ConnectionPools/MyCustomConnectionPool', []) // or namespace ->build();
ElasticON events are back!
Learn about the Elastic Search AI Platform from the experts at our live events.
Register now