SAM では、メッセージをキューに送信するか、あるいは WebSphere MQ および WPM ではトピックに配信/購読することができます。 トピックを SAM に指定するには、場所を指定する際に 'queue://AQUEUE' ではなく 'topic://fred' 形式を使用します。 配信/購読 機能を使用するには、正しいブローカ名を CAMConnect の "connect" コール時に指定し、対象のトピックを SAMConnect の "send" および "receive" コール時に指定する必要があります。 それ以外については、PHP のインターフェイスは point to point モデルと同じです。
デフォルトでは、SAM は永続的でない購読を作成して配信/購読を行います。 つまり、メッセージをトピックに配信しているときにクライアントアプリケーションがアクティブでなくなると、 その後アプリケーションが再開しても受信処理は行われないということです。 WPM あるいは WebSphere MQ の配信/購読 を使用している場合は、 SAM でトピックへの永続的な購読を作成することができます。 こうすると、データの配信時にクライアントがアクティブでなかったとしても、 アプリケーションでデータを受信することができるようになります。
永続的な購読を指定するには SAMConnect の "subscribe" コールを使用します。 このメソッドは、対象となるトピックを入力パラメータとして受け取り、 購読 ID を返します。この ID を使用して、"receive" コールを行います。 購読が不要になった場合は、SAMConnection の "unsubscribe" メソッドを使用して購読を削除します。
例1 トピックに対する永続的な購読の作成
<?php
$subName = $conn->subscribe('topic://A');
if (!$subName) {
echo "購読に失敗しました";
} else {
# 購読に成功しました
// ...
}
?>
例2 WebSphere Platform Messaging (WPM) サーバを使用したトピックの購読
<?php
$conn = new SAMConnection();
// 注意: WPM での配信/購読では、永続的な購読を保持するメッセージングエンジン
// (SAM_WPM_DUR_SUB_HOME) を接続の際に指定する必要があります
$conn->connect(SAM_WMQ, array(SAM_ENDPOINTS => 'localhost:7278:BootstrapBasicMessaging',
SAM_BUS => 'Bus1',
SAM_TARGETCHAIN => 'InboundBasicMessaging'
SAM_WPM_DUR_SUB_HOME => 'MyMachineNode01.server1-Bus1'));
$subName = $conn->subscribe('topic://A');
if (!$subName) {
echo "購読に失敗しました";
} else {
# 購読に成功しました
// ...
}
?>
例3 永続的な購読による、配信されたデータの受信
<?php
$msg = $conn->receive($subName);
if ($msg) {
echo "メッセージの受信に成功しました";
} else {
echo "受信に失敗しました";
}
?>
例4 トピックへの永続的な購読の削除
<?php
if (!$conn->unsubscribe($subName)) {
echo "購読解除に失敗しました";
}
?>