AMQP Adapter
- 主要言語
- PHP
- スター
- 49
- フォーク
- 10
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
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.
コントリビューションガイド
調査の方向性
まず、既存の SqsAdapter と、issue で言及されている php-amqplib AMQPChannel のエントリーポイント basic_consume()、basic_get()、batch_basic_publish() を比較します。最初に acknowledgement と consumer の動作を調査します。enqueue、dequeue、acknowledge をサポートする機能的な AMQP adapter が完成すれば、完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- php, rabbitmq
- 領域
- backend, distributed-systems
- issue の種類
- 機能追加
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 停滞
- 明瞭さ
- 説明が足りない
- 初心者へのやさしさ
- 25/100