私のチームは、私たちのアプリケーションにGoogle Pub/Subを組み込むことに本当に熱心です。 私たちが抱えている問題は、java appengine devサーバーと一緒にローカル統合テストを行う方法です。ローカルGAE java devサーバ用のGoogle Pub/Subテスト戦略
私がこれまで何をやったか:
-
はパブのサブエミュレータを起動し、トピックとサブスクリプションを作成するJavaのdevのサーバー でPUBSUB_EMULATOR_HOST 環境変数
- 開始我々のアプリケーションを設定してから送信し
- トピックにいくつかのメッセージ
私はので、私は何か間違ったことをやっていると仮定している:(?確かに、彼らはのpubsubエミュレータで作成しておく必要があります)
- クラウドで作成したトピックとサブスクリプション
- のメッセージがされていますプッシュされ、メッセージIDが戻されますが、エンドポイントに達していないか、クラウドまたはエミュレータでエラーが報告されています。
これから私は、エミュレータがdevサーバによって選択されていないことを確信しています。
また、私たちのテスト戦略に関するいくつかの質問があります。ますます多くのサービスがクラウドに縛られるようになって、現代のローカル統合テストは本当に実現可能ですか?クラウドインスタンス自体に対して実行される統合テストスイートにもっと焦点を当てるべきでしょうか?もしそうなら、クラウドテスト環境にデプロイする前に開発者がコードに自信を持ち、フィードバックループを大幅に増やさないようにするにはどうすればよいでしょうか?今私が正常にローカルエミュレータに公開することができますローカル設定から:(8010 localhostを)私は、URLを注入することができたグーグルのJava APIクライアントPubSubのビルダークラスを使用してUPDATE
。
Pubsub client = new Pubsub.Builder(httpTransport, jsonFactory, initializer)
.setApplicationName(getProjectId())
.setRootUrl(rootUrl).build();
ダイナミックに変化するポートに依存するのではなく、私のチームの残りの部分のセットアップを簡略化するために使われたポートを強制しました。
gcloud beta emulators pubsub start --host-port localhost:8010
ここでは、サブスクリプションとメッセージがエミュレータで正常に作成されています。残念ながら私は依然として登録されたエンドポイントにプッシュされたメッセージを取得していません。
UPDATE 2
のgcloudバージョン120.0.0は、物事を改善するためのようだが、私は今、次のエラー取得しています:
{
"code" : 400,
"message" : "Payload isn't valid for request.",
"status" : "INVALID_ARGUMENT"
}
Googleにバグレポートを送信しました:https://code.google.com/p/cloud-pubsub/issues/detail?id=39 –