AMQP Adapter
- Vorherrschende Sprache
- PHP
- Sterne
- 49
- Forks
- 10
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
This is just a placeholder for discussion regarding a new AMQP adapter (RabbitMQ, etc).
I did some prototyping of a new adapter using the SqsAdapter as a baseline and my preferred library (one of the best AFAIK): https://github.com/videlalvaro/php-amqplib.
I was able to `enqueue` and `dequeue` the messages rather easily, but have had trouble with `acknowledge` thus far. I'll continue to work on that and link to it when I have something functional.
The AMQP library recommends that consumers use `$channel->basic_consume()`.
https://github.com/videlalvaro/php-amqplib/blob/master/PhpAmqpLib/Channel/AMQPChannel.php#L898
This works by declaring a callback and the consumer will remain attached and receiving messages as long as the callback is registered.
The core logic looks roughly like this:
```
try {
// params: $queue, $consumer_tag, $no_local, $no_ack, $exclusive, $nowait, $callback
$channel->basic_consume($this->name, '', false, false, false, false, $callback);
} catch (Exception $e) {
// @TODO Channel setup exception
}
// Loop as long as the channel has callbacks registered
while (count($channel->callbacks)) {
try {
var_dump('waiting');
$channel->wait();
} catch (Exception $e) {
// @TODO Channel wait exception
}
}
```
I have not yet been able to `dequeue` using the above `basic_consume` logic which I think will be the best long-term approach for this new adapter. I'll circle back to this after I can get `acknowledge` working.
However, I was able to get the `$channel->basic_get()` operation to work within a loop yielding `$factory->createMessage()` items.
https://github.com/videlalvaro/php-amqplib/blob/master/PhpAmqpLib/Channel/AMQPChannel.php#L981
The AMQP library doesn't recommend this due to inefficiencies (etc), but I have seen their maintainers suggest this method as an option for people trying to build their own blocking consumers.
A third option is also a possibility: `$channel->batch_basic_publish()`
https://github.com/videlalvaro/php-amqplib/blob/master/PhpAmqpLib/Channel/AMQPChannel.php#L1115
I haven't used it myself and didn't know it was even available until last week.
Beitragsleitfaden
Rechercherichtung
Beginne mit dem Vergleich des vorhandenen SqsAdapter mit den im Issue erwähnten Einstiegspunkten von php-amqplib AMQPChannel: basic_consume(), basic_get() und batch_basic_publish(). Untersuche zuerst die Bestätigungs- und Consumer-Verhaltensweisen; abgeschlossen ist die Arbeit, wenn ein funktionaler AMQP-Adapter vorhanden ist, der enqueue, dequeue und acknowledge unterstützt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- php, rabbitmq
- Bereich
- backend, distributed-systems
- Issue-Typ
- Feature
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Muss geklärt werden
- Anfängerfreundlichkeit
- 25/100