問題タブ [spring-messaging]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Spring サーバーで STOMP Websocket を閉じる方法
spring-websocket と spring-messaging (バージョン 4.2.2.RELEASE) を使用して、完全な機能を備えたブローカー (Apache ActiveMQ 5.10.0) を使用して websocket に STOMP を実装しています。
私のクライアントは、宛先のみにサブスクライブすることを意図しています。つまり、メッセージを送信できないはずです。さらに、クライアントがサブスクライブできる宛先をより厳密に制御したいと考えています。どちらの場合でも(つまり、クライアントがメッセージを送信しようとしたり、無効な宛先にサブスクライブしようとしたりする場合)、できるようにしたいと思います
- 適切なエラーを送信する、および/または
- ウェブソケットを閉じる
すべての宛先が ActiveMQ に転送されることに注意してください。インバウンド チャネルにChannelInterceptorを実装できると思ったのですが、API を見ると、目的を達成する方法がわかりません。これは可能ですか?クライアントのリクエストを検証する最善の方法は何ですか? 私の websocket 構成は以下のとおりです。
spring - NoClassDefFoundError: スプリング メッセージング アプリケーションをアンデプライする場合の DefaultLifecycleProcessor$1
Tomcat 7 で実行している Spring アプリケーションがあります。WebSocket を追加した後、デプロイ解除中にログに次のエラーが表示されるようになりました。
ログとアンデプロイの時間の増加 (タイムアウトを待つ) 以外は、すべて正常に動作します。
追加された WebSockets コードには特別なものはありません。@Controller
の1 つのサブクラスと の 1 つのサブクラスだけAbstractWebSocketMessageBrokerConfigurer
ですAbstractSecurityWebSocketMessageBrokerConfigurer
。
どうしたの?org.springframework.context.support.DefaultLifecycleProcessor
jarファイルが欠落しているとspring-context-4.2.2-RELEASE
は思いませんWEB-INF/lib
。匿名クラスDefaultLifecycleProcessor$1
もあります。
spring - ルーティング スリップ スプリングの統合 (4.2)
Spring 統合を使用してルーティング スリップ (EI パターン) を実装しようとしています。私が行った設定は
したがって、routingServiceChannel に到達すると、routingChannel2 に移動し、次に routingChannel1 に移動します。しかし、私の場合、応答チャネルがないという例外が常にスローされます。出力チャンネルを設定すると、
次に、routingChannel2 と routingChannel1 に行く代わりに、xyzChannel にルーティングが発生します。
Spring Integration Core でコードをデバッグしたとき、このコードに出くわしました。
クラス AbstractReplyProducingMessageHandler
ここで、ハンドル メッセージ メソッドで、routingSlip マップを取得し、それを結果に割り当てます。と
応答から routingSlip 構成を取得する代わりに、requestMessage から取得しようとしています。ここで何か不足していますか?設定する必要がある追加の構成はありますか?
java - spring-messaging websockets ユーザーサブスクリプションをカスタマイズする方法は?
企業環境でSpring Messaging WebSocketを使用しています。spring-messaging コンポーネントは DMZ で実行されます。内部ネットワークへのファイアウォールを介して ActiveMQ ブローカー ネットワークに接続されます。接続は spring-security を使用して DMZ で認証され、ユーザー プリンシパルが利用可能になります。
内部ネットワーク内のサービスが ActiveMQ への接続を介して公開できる、ユーザー固有のトピックへのサブスクリプションを作成する必要があります。spring-messaging/user
プレフィックスは、この機能を提供しているようです。
認証済みで のトピックへのサブスクリプションを作成すると、すぐに使用でき、 はこれをセッション ID/user/foo/bar
にDefaultUserDestinationResolver
変換し、ActiveMQ では、STOMP コネクタによって のトピックへのサブスクリプションが表示されます/foo/bar-userjf44st89
。私のシナリオでは、これには 2 つの問題があります。
session-id
jf44st89
はユーザー ID に戻すことができないため、内部ネットワークのサービスは ActiveMQ 接続を介して特定のユーザーに公開できません。それらは、内部ネットワークからファイアウォールを経由して、Spring メッセージング コンポーネントが実行される DMZ への許可されたルートではないため、Spring メッセージング コンポーネントへの公開を含むソリューションはありません。認証されているが許可されていないユーザーが、セッション ID を推測して
/foo/bar-userjf44st89
. 成功する可能性は低いですが、ありそうもないことよりも不可能なことを好みます。
したがって、両方の問題を解決し、内部サービスが ActiveMQ ワイルドカードを使用してセッション ID パス コンポーネントを無視できるようDefaultUserDestinationResolver
にするフォームのサブスクリプションを作成する独自の Bean で拡張したいと考えています。/user/user-id/session-id/foo/bar
*
私の主な質問は、どのように交換するのが最善DefaultUserDestinationResolver
ですか? クラスによって Bean として作成されAbstractMessageBrokerConfiguration
ます。ユーザーが独自の@Primary
UserDestinationResolver Bean を作成することを意図したアプローチですか? DefaultUserDestinationResolver
の機能のほとんどを保持し、それが生成するトピックの形式を変更したいと思います。
java - Spring WebSocketStompClient は SockJsClient を使用して接続しません
それで、私はここでRossen Stoyanchevによる優れた例からsockJsコードを複製しようとしていました: https://github.com/rstoyanchev/spring-websocket-portfolio/blob/master/src/test/Java/org/springframework/samples/ポートフォリオ/ウェブ/ロード/StompWebSocketLoadTestClient.java
ただし、Stomp エンドポイントに接続できないという問題が発生しました。で実行がフリーズしstompClient.connect()
、それ以上のデバッグ メッセージは表示されず、ハンドラからも表示されません。
これが私のコードです:
私がWebSocketStompClient
それを使用すると、すべて正常に動作します。
この問題は ActiveMQ で再現できるため、Artemis 固有の問題ではないと思います。Spring Boot を使用してこのアプリを実行しましたが、特に何も構成していませんWebSocketStompClient
。
誰かが同様の問題に遭遇したことがある場合は、これを修正する方法についての洞察や提案をいただければ幸いです。ここで追加のブローカー/スプリングアプリ構成が欠落していますか?