RESTのような3層システム用のAPIを設計しています:_Client application
_-> _Front-end API cloud server
_-> user's home API server (Home)
。
Home
はホームデバイスであり、Websocketまたはロングポーリングを介して_Front-end
_への接続を維持することになっています(これは、RESTに違反している最初の場所です) 。さらに悪化する)。 _Front-end
_は主にClient
リクエストをHome
接続にトンネリングし、一部の呼び出し自体を処理します。 Home
がClient
に通知を送信することがあります。
_Front-end
_とHome
のAPIは基本的に同じです。 Client
は、LAN経由でHome
に直接接続している可能性があります。この場合、Home
は_Front-end
_自体にいくつかのClient
アクションを登録する必要があります。
このシステムでのRESTの長所は次のとおりです。
RESTコントラは次のとおりです。
Front-end
_は、一部の非同期呼び出しに_202 Accepted
_を返すだけで、必要なHome
接続が壊れており、_503
_があったはずであることがわかります。Home
はClient
にメッセージを送信する必要があります。 Client
は_Front-end
_をポーリングするか、接続を維持する必要があります。Websocketで [〜#〜] wamp [〜#〜] / Autobahn を使用して、パブリッシュ/サブスクライブ機能を取得することを検討しています。キュー。
一種のメッセージングキューをトランスポートとして評価する価値はありますか?
メッセージキューの反対のように見えます:
これらの考慮事項はどのくらい深刻ですか?
接続性がある場合は、メッセージキューを使用します。ただし、特定の構造と形式のメッセージを送信するには、独自のプロトコルを定義する必要があります(難しいタスクではありません)。
メンテナンスの問題は、通常、クライアントとサーバーが別々に構築されるため、両端で同じメッセージ定義を使用するように注意する必要があることですが、十分に整理されていない場合は、=で使用するのと同じXMLを使用してくださいRESTサービス。
ポート80とhttpのみで「単一方向」通信を使用し、インターネット経由の接続の問題がある場合は、RESTスタイルのシステムがおそらく最良です。送信してポーリングするか、コールバック用のWebSocketを取得しますデータですが、一般的には、システムをクライアント/サーバーとして設計します。接続を取得できる場合は、メッセージングシステムが最適です。
メッセージングシステムの場合は ZeroMQ を使用します。フォールトトレラントシナリオを含め、あらゆるシナリオでねじれるように構成できます。 httpで動作 かどうかはわかりません。
アウトバーンはあなたがやろうとしていることにうまく適合しているようです。他にも利用可能なツールがあります。 Windows Azure Service Bus を確認してください(Java、.NET、PHP、Python、NodeJS、Rubyのクライアントフレームワークがあります)。
組み込みの休憩メッセージは便利ですが。アプリケーションが基本的なCRUD操作よりも大きくなることがわかります。たとえば、アプリケーションが銀行システムである場合。の代わりに
Acct 54321のバランスを更新=バランス-20.00 Acct 98765のバランスを更新=バランス+ 20.00
あなたはおそらく単一のメッセージが欲しいでしょう
アカウント54321からアカウント98765に20.00を転送
REST後でではなく今すぐに)この障害を発見するのが最善です。アプリケーション内でメッセージングのためのよりリッチなモデルを作成する方法について説明しているGreg Youngの Event Centric を確認してください。