7.1-plugin-loadbalancer.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <?php
  2. require(__DIR__.'/init.php');
  3. htmlHeader();
  4. // create a client instance and create endpoints
  5. $client = new Solarium\Client($config);
  6. $endpoint1 = $client->createEndpoint('local1'); //normally you would add endpoint specific settings...
  7. $endpoint2 = $client->createEndpoint('local2');
  8. $endpoint3 = $client->createEndpoint('local3');
  9. // get loadbalancer plugin instance and add endpoints
  10. $loadbalancer = $client->getPlugin('loadbalancer');
  11. $loadbalancer->addEndpoint($endpoint1, 100);
  12. $loadbalancer->addEndpoint($endpoint2, 100);
  13. $loadbalancer->addEndpoint($endpoint3, 1);
  14. // create a basic query to execute
  15. $query = $client->createSelect();
  16. // execute the query multiple times, displaying the server for each execution
  17. for ($i = 1; $i <= 8; $i++) {
  18. $resultset = $client->select($query);
  19. echo 'Query execution #' . $i . '<br/>';
  20. echo 'NumFound: ' . $resultset->getNumFound(). '<br/>';
  21. echo 'Server: ' . $loadbalancer->getLastEndpoint() .'<hr/>';
  22. }
  23. // force a server for a query (normally solr 3 is extremely unlikely based on its weight)
  24. $loadbalancer->setForcedEndpointForNextQuery('local3');
  25. $resultset = $client->select($query);
  26. echo 'Query execution with server forced to local3<br/>';
  27. echo 'NumFound: ' . $resultset->getNumFound(). '<br/>';
  28. echo 'Server: ' . $loadbalancer->getLastEndpoint() .'<hr/>';
  29. // test a ping query
  30. $query = $client->createPing();
  31. $client->ping($query);
  32. echo 'Loadbalanced ping query, should display a loadbalancing server:<br/>';
  33. echo 'Ping server: ' . $loadbalancer->getLastEndpoint() .'<hr/>';
  34. // exclude ping query from loadbalancing
  35. $loadbalancer->addBlockedQueryType(Solarium\Client::QUERY_PING);
  36. $client->ping($query);
  37. echo 'Non-loadbalanced ping query, should not display a loadbalancing server:<br/>';
  38. echo 'Ping server: ' . $loadbalancer->getLastEndpoint() .'<hr/>';
  39. htmlFooter();