2016-06-17 7 views
2

ノードjsを使用しています。Azureサービスバスサービストピックの永続サブスクリプションを作成します。今は一度だけ実行されます。私はこれを初めて知っています。前もって感謝します。私はトピックを購読するために次のコードを使用しています。Azure + Node Jsサービスバストピックの永続サブスクリプション

var azure = require('azure'); 

var azureConnection = "Endpoint=sb:My connection string" 

var retryOperations = new azure.ExponentialRetryPolicyFilter(); 
var serviceBusService = azure.createServiceBusService(azureConnection).withFilter(retryOperations); 

serviceBusService.receiveSubscriptionMessage('mytopic01', 'mytopicsub', function (error, receivedMessage) { 

    if (!error) { 
     // // // Message received and deleted 
     console.log(receivedMessage); 
    } 
}); 

また、setInterval関数を使用したくありません。私はメッセージが自動的にサブスクリプションをトリガするトピックに公開する場合、解決したい。

+0

receiveSubscriptionMessageは、サブスクリプション・クライアント・レベルでサブスクリプションからメソッドを受信するためのメソッドです。内部的には、サブスクリプションをポーリングします。サーバーサイドプッシュオプションはありません。 – Aravind

+0

私はそれがクライアント側の方法であることを知っています。サーバーから発行されたデータを取得するには、このメソッドを手動で呼び出す必要があります。サーバーに公開されたデータが自動的に呼び出される必要があります(つまり、サーバーが購読トピックのデータを公開した後にデータを自動的に受信する必要があります)。 –

+0

少なくとも1回は実行する必要があります。いずれの場合もノードはサーバー側jsです。それはコールバックメソッドのように機能します。私は個人的にこれを試みたことはありません。 – Aravind

答えて

1

実際には、クライアントアプリケーションが独立したnode.jsアプリケーションである場合、私たちは通常ループでサービスバスからメッセージを受け取るサイクルプログラムを設定します。 E.G.

var azure = require('azure'); 
var sbService = azure.createServiceBusService(<connection_string>); 
function checkForMessages(sbService, queueName, callback) { 
    sbService.receiveSubscriptionMessage(queueName, { isPeekLock: true }, function (err, lockedMessage) { 
    if (err) { 
     if (err === 'No messages to receive') { 
     console.log('No messages'); 
     } else { 
     callback(err); 
     } 
    } else { 
     callback(null, lockedMessage); 
    } 
    }); 
} 
function processMessage(sbService, err, lockedMsg) { 
    if (err) { 
    console.log('Error on Rx: ', err); 
    } else { 
    console.log('Rx: ', lockedMsg); 
    sbService.deleteMessage(lockedMsg, function(err2) { 
     if (err2) { 
     console.log('Failed to delete message: ', err2); 
     } else { 
     console.log('Deleted message.'); 
     } 
    }) 
    } 
} 
setInterval(checkForMessages.bind(null, sbService, queueName, processMessage.bind(null, sbService)), 5000); 

あなたはAzureのチームによって提供さGitHubで同様のシナリオでのサンプルコードを参照することができます。

さらに詳しいことがありましたら、お気軽にお知らせください。

+0

ここではsetInterval関数を使用しています。私はそれを使用したくない。私のアプリケーションは遅くなります。私は公開するために毎秒100以上のリクエストを送信しています。同じリアルタイムで購読したいsetIntervalを使用するとそれを処理することはできません。 –

+0

Node.jsのAzure SDKは、HTTPプロトコルを介してRest APIを実装しているため、現在はsetInterval関数が必要です。また、前に説明した受信パフォーマンスについては、http://stackoverflow.com/questions/34111382/max-throughput-for-azure-service-busqueque-with-node-js-library/34127328#34127328を参照してください。 。 –

+0

OKありがとうゲーリー... –

関連する問題