2016-05-26 1 views
0

私の要求ハンドラVertxのSession Object Insideイベントバスにアクセスするには?

router.route("/clientController/*").handler(sockJSHandler); 

と私のイベントバスが

eb.consumer("chat.to.server",message->{ 
     System.out.println("Getting Request in Client Controller Event Bus"); 
     JsonObject data = (JsonObject) message.body(); 
     String classifier = data.getString("classifier"); 

     if(classifier.equals("loginUri")) { 
      System.out.println("Request for Login URI"); 
      vertx.executeBlocking(future -> { 
       future.complete(OAuth.getOAuthParam()); 
      }, res -> { 
       eb.publish("chat.to.client", res.result()); 
      }); 

     } 

では、我々はroutingContext.getSession(のように通常のルーティングハンドラがそうであるようイベントバス内でセッションオブジェクトにアクセスすることが可能である)

答えて

1

短い答え、できません。ルーティングコンテキストセッションは、イベントバスとは関係ありません。ルーティング・コンテキストは非常にWeb固有のものですが、イベント・バスはHTTPサーバーを使用せずに配置できます。

イベントバスに状態を設定する必要がある場合は、メッセージのヘッダーにセッションIDを渡す必要があります。セッションがクラスタ化されている場合にのみ、クラスタストアからセッションIDを取得できます。 id。そうすることで、矛盾が生じるかもしれないので、私はそれをしないようにアドバイスしています。

代わりに、メッセージペイロードに必要なすべてのセッションデータを入れてください。

関連する問題