1. Go to this page and download the library: Download profi-tech/tsqm-php library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
profi-tech / tsqm-php example snippets
$dsn = "<PDO dsn of database where you created a table>";
$username = "<your username>";
$password = "<your password>";
$pdo = new PDO($dsn, $username, $password);
$tsqm = new Tsqm\Tsqm($pdo);
...
$tsqm = new Tsqm\Tsqm(
$pdo,
(new Tsqm\Options())
->setTable("my_tsqm_table") // Name of the table where tasks are stored
->setLogger(new MyLogger()) // PSR-3 compatible logger
->setContainer(new MyContainer()) // DI container
->setQueue(new MyQueue()) // Queue implementation
->setForceSyncRuns(true) // Force synchronous runs for debugging and unit testing
->setMaxNestingLevel(10) // Maximum number of nested transactions
->setMaxGeneratorTasks(10) // Maximum number of tasks in a generator
);
$task = (new Tsqm\Task())
->setCallable("greet")
->setArgs("John Doe");
class Greeter {
public function __invoke(string $name): string {
return "Hello, $name!";
}
}
class MyContainer implements Tsqm\Container\ContainerInterface {
...
}
$tsqm = new Tsqm\Tsqm(
$pdo,
(new Tsqm\Options())
->setContainer(new MyContainer())
);
$task = (new Tsqm\Task())
->setCallable(new Greeter())
->setArgs("John Doe")
->setRetryPolicy(
(new Tsqm\RetryPolicy())
->setMaxRetries(3)
->setMinInterval(5000)
);
...
$tsqm->poll(
100, // Number of tasks to poll
30, // Time in seconds to "step back" from the current time (usefull for the fallback mode)
10 // Idle time in seconds if no tasks found
);
class MyQueue implements Tsqm\Queue\QueueInterface {
public function enqueue(string $taskName, string $taskId, DateTime $scheduledFor): void {
... put $taskId to your favorite message broker like RabbitMQ, Apache Kafka etc.
}
/**
* @param callable(string $taskId): ?Task $callback
*/
public function listen(string $taskName, callable $callback): void {
... listen your favorite message broker like RabbitMQ, Apache Kafka etc
... recieve $taskId and call $callback with it
}
}
$tsqm = new Tsqm\Tsqm(
$pdo,
(new Tsqm\Options())
->setQueue(new MyQueue())
);
$tsqm->listen($taskName);
class Greet
{
...
public function __invoke(string $name): Generator
{
$valid = yield (new Task())
->setCallable($this->validateName)
->setArgs($name);
if (!$valid) {
return false;
}
$greeting = yield (new Task())
->setCallable($this->createGreeting)
->setArgs($name);
try {
$greeting = yield (new Task())
->setCallable($this->purchase)
->setArgs($greeting)
->setIsSecret(true)
->setRetryPolicy(
(new RetryPolicy())
->setMaxRetries(3)
->setMinInterval(5000)
);
} catch (Exception $e) {
yield (new Task())
->setCallable($this->revertGreeting)
->setArgs($greeting);
return false;
}
return $greeting;
}
}
...
$task = (new Task())
->setCallable(new Greet(...))
->setArgs("John Doe");
$task = $tsqm->run($task);
class MyLogger implements Tsqm\Logger\LoggerInterface {
...
public function log($level, string $message, array $context = []): void {
// Your log implementation here
}
}
$tsqm = new Tsqm\Tsqm(
$pdo,
(new Tsqm\Options())
->setLogger(new MyLogger())
);
composer
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.