
# Αυτόνομη χρήση

Το Queuety διατίθεται ως πρόσθετο WordPress, αλλά το μεγαλύτερο μέρος του χρόνου εκτέλεσης δεν χρειάζεται ενεργό αίτημα WordPress.

Η ουρά, η μηχανή ροών εργασιών, οι μηχανές κατάστασης, τα σήματα, τα τεχνουργήματα, η ομαδοποίηση, ο προγραμματισμός, η καταγραφή, οι μετρήσεις και η διαχείριση πόρων λειτουργούν στους ίδιους πίνακες MySQL. Αν μια άλλη διεργασία PHP μπορεί να ανοίξει την ίδια βάση δεδομένων, μπορεί να χρησιμοποιήσει απευθείας αυτόν τον πυρήνα.

Αυτό είναι το όριο της αυτόνομης χρήσης στο Queuety. Η μηχανή ενορχήστρωσης που βασίζεται στη βάση δεδομένων μπορεί να χρησιμοποιηθεί εκτός του WordPress. Οι γέφυρες WordPress εξακολουθούν να ανήκουν στο WordPress.

## Τι λειτουργεί εκτός του WordPress

Με απευθείας σύνδεση `Connection`, μια αυτόνομη διεργασία μπορεί να αρχικοποιήσει το Queuety και να χρησιμοποιήσει τις ίδιες μεθόδους facade που χρησιμοποιεί το πρόσθετο για τον πυρήνα χρόνου εκτέλεσης:

- αποστολή εργασιών
- εκτέλεση worker και δεξαμενών worker
- δημιουργία και αποστολή ροών εργασιών
- αποστολή σημάτων, εγκρίσεων και εισόδου ροής εργασιών
- δημιουργία και αποστολή μηχανών κατάστασης
- εξέταση της κατάστασης ροών εργασιών και μηχανών
- αποθήκευση και ανάγνωση τεχνουργημάτων
- διαχείριση ομαδοποίησης, αλυσιδωτής εκτέλεσης και επαναλαμβανόμενων προγραμμάτων
- αναζήτηση σε αρχεία καταγραφής, μετρήσεις, ουρές και κατάσταση χρόνου εκτέλεσης

Έτσι, ένα εξωτερικό προϊόν μπορεί να επικοινωνεί με την ίδια κατάσταση ενορχήστρωσης χωρίς να εκκινήσει πρώτα το WordPress, αρκεί να χρησιμοποιεί την ίδια βάση δεδομένων και τα ίδια ονόματα πινάκων.

Οι δεξαμενές worker αποτελούν σήμερα τη μοναδική εξαίρεση: τα `Queuety::run_worker_pool()` και `Queuety::run_auto_scaling_worker_pool()` διαβάζουν τις σταθερές WordPress `DB_HOST`, `DB_NAME`, `DB_USER` και `DB_PASSWORD` αντί για τη σύνδεση που έχει αρχικοποιηθεί, επομένως μια αυτόνομη διεργασία πρέπει να ορίσει αυτές τις σταθερές πριν εκκινήσει μια δεξαμενή ([#5](https://github.com/inline0/queuety/issues/5)).

## Τι παραμένει εντός του WordPress

Το επίπεδο γέφυρας που αφορά ειδικά το WordPress εξακολουθεί να εξαρτάται από τη φόρτωση του WordPress.

Αυτό περιλαμβάνει:

- την εκκίνηση και τη συμπεριφορά ενεργοποίησης του πρόσθετου στο `queuety.php`
- το `Queuety::on_action()`, που απαιτεί το `add_action()`
- τα `Queuety::replace_wp_cron()` και `Queuety::restore_wp_cron()`, που εξαρτώνται από τα φίλτρα WordPress cron και το `do_action()`
- την πραγματική διαδρομή καταχώρισης εντολών `wp queuety ...`, που εξαρτάται από τη φόρτωση του WP-CLI από το WordPress

Αυτά τα μέρη είναι προσαρμογείς γύρω από τον πυρήνα χρόνου εκτέλεσης. Δεν αποτελούν τον ίδιο τον χρόνο εκτέλεσης.

## Αρχικοποίηση

Η αυτόνομη διαδρομή είναι σκόπιμα μικρή. Ανοίξτε ένα `Connection` που βασίζεται σε DB, αρχικοποιήστε το facade και βεβαιωθείτε ότι υπάρχει το σχήμα.

```php
use Queuety\Connection;
use Queuety\Queuety;

$conn = new Connection(
    host: '127.0.0.1:3306',
    dbname: 'wordpress',
    user: 'root',
    password: 'secret',
    prefix: 'wp_',
);

Queuety::init( $conn );
Queuety::ensure_schema();
```

Έπειτα, είναι διαθέσιμο το κανονικό API χρόνου εκτέλεσης:

```php
Queuety::dispatch( 'send_email', [ 'to' => 'user@example.com' ] );

$workflow_id = Queuety::workflow( 'report' )
    ->then( FetchReportData::class )
    ->then( RenderReport::class )
    ->dispatch( [ 'report_id' => 42 ] );

$machine_id = Queuety::machine( 'agent_session' )
    ->state( 'awaiting_input' )
    ->on( 'message', 'planning' )
    ->state( 'planning' )
    ->action( PlanSessionAction::class )
    ->dispatch();
```

## Ονομασία πινάκων

Η αυτόνομη χρήση δεν απαιτεί συγκεκριμένα ονόματα πινάκων WordPress. Χρειάζεται μόνο μια σταθερή στρατηγική προθεμάτων.

Αν συνδέσετε το Queuety με βάση δεδομένων WordPress, χρησιμοποιήστε το ίδιο πρόθεμα που χρησιμοποιεί εκεί το πρόσθετο. Αν χρησιμοποιείτε το Queuety σε ξεχωριστή βάση δεδομένων, το πρόθεμα της σύνδεσης μπορεί να είναι όποιο αναμένει η εφαρμογή υποδοχής σας. Το τμήμα ονόματος πίνακα που αφορά ειδικά το Queuety εξακολουθεί να ελέγχεται από το `QUEUETY_TABLE_PREFIX` και τις παρακάμψεις ανά πίνακα.

Οι ενσωματωμένοι χρόνοι εκτέλεσης που μοιράζονται μία βάση δεδομένων μπορούν να ορίσουν αυτό το τμήμα που αφορά ειδικά το Queuety ανά σύνδεση:

```php
$conn = new Connection(
    host: '127.0.0.1:3306',
    dbname: 'wordpress',
    user: 'root',
    password: 'secret',
    prefix: 'wp_',
    table_prefix: 'themequeue_',
);
```

Έτσι, το πρόθεμα βάσης δεδομένων WordPress μένει ανέπαφο και ονόματα πινάκων όπως το `queuety_jobs` επιλύονται ως `wp_themequeue_jobs`.

## Νοητικό μοντέλο

Ο απλούστερος τρόπος να κατανοήσετε τον διαχωρισμό είναι ο εξής:

- πυρήνας Queuety = ουρά, worker, ροές εργασιών, μηχανές κατάστασης, σήματα, τεχνουργήματα και μεταδεδομένα χρόνου εκτέλεσης
- προσαρμογέας WordPress = εκκίνηση πρόσθετου, γέφυρες hooks, αντικατάσταση WP-Cron και καταχώριση WP-CLI

Έτσι διατηρείται μία μηχανή ενορχήστρωσης, ενώ η ενσωμάτωση συμβάντων και αιτημάτων που αφορά ειδικά το WordPress παραμένει εκεί όπου ανήκει.
