©Sergey Emelyanov 2025 | Alle Rechte vorbehalten
Willkommen zum zweiten Teil unseres Kurses „Asynchrones Vtiger mit RabbitMQ“. Im ersten Video haben wir die Grundlagen geschaffen: RabbitMQ installiert, Vtiger integriert und Kontakte asynchron von Vtiger an Laravel gesendet. Heute gehen wir einen Schritt weiter – wir aktualisieren geänderte Daten (z. B. Telefonnummern) in Laravel, sobald sie in Vtiger bearbeitet werden.
In der ersten Implementierung senden wir bei jeder Kontakterstellung alle Daten an Laravel. Doch was passiert bei Updates?
Lösung: Senden Sie nur die geänderten Felder + Kontakt-ID.
Erstellen Sie ein benutzerdefiniertes Event, das vor jedem Speichern eines Kontakts ausgelöst wird:
// Vtiger-Code (Beispiel)
$contactId = $recordModel->getId();
$modifiedFields = $recordModel->getModifiedFields(); // Nur geänderte Felder
$message = [
'event_type' => 'contact_updated',
'contact_id' => $contactId,
'changes' => $modifiedFields
];
// RabbitMQ-Publish
$channel->basic_publish(
new AMQPMessage(
json_encode($message),
['content_type' => 'application/json', 'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT]
),
'vtiger_events',
'laravel_updates'
);
RabbitMQ erlaubt Metadaten für Nachrichten:
content_type
: application/json
(klar strukturiertes Format).content_encoding
: UTF-8
(Standard für Unicode).message_id
: Eindeutige ID fürs Tracking (z. B. UUID).persistent
: true
– Nachricht überlebt Broker-Neustarts (nur bei dauerhaften Queues).Achtung: Persistent Messages + Durable Queues verursachen Overhead. Nutzen Sie sie nur für kritische Daten.
Erstellen Sie einen Worker, der Änderungen verarbeitet:
// Laravel-Code (app/Console/Commands/ConsumeVtigerUpdates.php)
public function handle() {
$connection = new AMQPStreamConnection(config('rabbitmq.host'), 5672, 'user', 'pass');
$channel = $connection->channel();
$channel->queue_declare('laravel_updates', false, true, false, false);
$callback = function ($msg) {
$data = json_decode($msg->body, true);
if ($data['event_type'] === 'contact_updated') {
$contact = Contact::find($data['contact_id']);
$contact->fill($data['changes']);
$contact->save();
}
$msg->ack();
};
$channel->basic_consume('laravel_updates', '', false, false, false, false, $callback);
while ($channel->is_consuming()) {
$channel->wait();
}
}
$channel->queue_declare(
'laravel_updates',
false, // passive
true, // durable
false, // exclusive
false // auto_delete
);
message_id
für spätere Analysen.php artisan consume:vtiger-updates &
.Beispiel: Ein Benutzer aktualisiert in Vtiger eine Telefonnummer:
{ "contact_id": 123, "changes": { "phone": "+49123456789" } }
an RabbitMQ.phone
-Feld.content_encoding
+ AES-256).Im Video zeige ich:
message_id
.Nächste Schritte:
Fragen? Stellen Sie sie in den Kommentaren – ich unterstütze Sie gern! 🚀
„Mit RabbitMQ wird Ihre Laravel-Anwendung zum perfekten Tanzpartner für Vtiger – jeder Schritt (Update) ist synchron, ohne dass sich die Partner ins Gehege kommen.“
©Sergey Emelyanov 2025 | Alle Rechte vorbehalten