これを達成する必要がある場合は、少し異なるアーキテクチャを使用すると思います。WAMP の考え方は、ルーターを非常に一般的なものに保つことだと思います。そのため、この例はありません。
「すべてのアプリケーション固有のコードは、ルーター自体ではなく、WAMP アプリケーション コンポーネントに存在する必要があります。」—トバイアス
そうは言っても、やりたいことを実行するのはそれほど難しくありませんが、メッセージを傍受する必要があります。理想的には、Broker をオーバーライドできればよいのですが、現時点ではそれを切り替える一般的な方法がありません。したがって、ルーターをオーバーライドして、すべてのメッセージを検査できます。
class MyRouter extends Router {
public function onMessage(TransportInterface $transport, Message $msg) {
if ($msg instanceof PublishMessage) {
if ($msg->getTopicName() == "mytopic") {
// mangle the message in here
}
}
parent::onMessage($transport, $msg);
}
}
次に、起動時にデフォルトの Router の代わりにこのクラスを使用します。
このコードはまだ試していませんが、機会があれば試してみます。しかし、アイデアはうまくいくはずです。