EMP コネクタの詳細
認証
LoginExample クラスは、デフォルトで、渡されたユーザログイン情報を使用して本番組織にログインします。
初期認証の後、LoginExample は、認証が無効になった場合 (Salesforce セッションが無効になった場合やアクセストークンが取り消された場合など) に再認証を行います。LoginExample は、認証が有効でなくなったときにストリーミング API が送信する 401::Authentication invalid エラーメッセージをリスンします。401 エラーを受信すると、このクラスは再認証を行います。トークンプロバイダは再認証を実行し、EmpConnector.setBearerTokenProvider() メソッドを使用して設定されます。
1BearerTokenProvider tokenProvider = new BearerTokenProvider(() -> {
2 try {
3 return login(argv[0], argv[1]);
4 } catch (Exception e) {
5 e.printStackTrace(System.err);
6 System.exit(1);
7 throw new RuntimeException(e);
8 }
9});
10
11BayeuxParameters params = tokenProvider.login();
12// . . .
13connector.setBearerTokenProvider(tokenProvider);OAuth 認証の場合は、BearerTokenExample は、BayeuxParameters コンストラクタを使用して BayeuxParameters クラスのメソッドを上書きし、トークンと URL の値を提供します。
1BayeuxParameters params = new BayeuxParameters() {
2
3 @Override
4 public String bearerToken() {
5 return "<token>";
6 }
7
8 @Override
9 public URL host() {
10 try {
11 return new URL("<URL>");
12 } catch (MalformedURLException e) {
13 throw new IllegalArgumentException(
14 String.format("Unable to create url: %s", argv[0]), e);
15 }
16 }
17};イベントのリスン
イベントをリスンするために、コネクタはラムダ式の Java イベントを使用します。このステートメントは、受信した各イベント通知のイベントメッセージを出力します。このステートメントをチャネルに登録するステートメントの前に配置します。
1Consumer<Map<String, Object>> consumer = event -> System.out.println(
2 String.format("Received:\n%s", event));チャネルへの登録
EmpConnector クラスは、接続と登録を開始するための機能を公開するメインクラスです。このクラスには、接続を作成する関数、チャネルに登録する関数、登録をキャンセルする関数、接続を停止する関数が含まれています。
1// Instantiate the EMP connector
2EmpConnector connector = new EmpConnector(params);
3
4// Wait for handshake with Streaming API
5connector.start().get(5, TimeUnit.SECONDS);
6
7// Subscribe to a channel
8// Block and wait for the subscription to succeed for 5 seconds
9TopicSubscription subscription = connector.subscribe("<Channel_Name>",
10 replayFrom, consumer).get(5, TimeUnit.SECONDS);登録を終了するには、次の関数をコールします。
1// Cancel a subscription
2subscription.cancel();
3
4// Stop the connector
5connector.stop();デバッグログ
デバッグを支援するため、LoggingListener クラスは Bayeux メッセージをコンソールに記録します。BearerTokenExample および DevLoginExample はログを使用しますが、LoginExample は使用しません。DevLoginExample は、EMP コネクタ GitHub プロジェクトの一部ですが、このウォークスルーでは取り上げません。詳細については、EMP コネクタの Readme ページを参照してください。