問題タブ [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.

0 投票する
1 に答える
990 参照

spring - spring websocket+rabbitmq stomp:オンラインユーザーをすべて取得し、一部のユーザーの接続を切断するにはどうすればよいですか?

spring ストア ユーザーの websocket セッションの場合、どうすれば取得できますか? someHandler を使用してセッションをマップに配置すると、マップのサイズが 10w+ より大きくなる可能性があります。

SessionHandler.java

このように: https://github.com/isaranchuk/spring-websocket-disconnect/blob/master/src/main/java/hello/SessionHandler.java

0 投票する
1 に答える
456 参照

spring - Spring Integration ルーティング スリップ

春の統合を使用してルーティング スリップを実装しようとしています。構成は次のとおりです。

追加したヘッダーエンリッチャーの後にルーティングスリップを参照するために

この実装は機能しますが、2 回に 1 回は機能します。Spring コードをデバッグした後、このコードに出くわし、問題を解決しました。

UnicastingDispatcher クラス内

[org.springframework.integration.jms.JmsSendingMessageHandler#11, routingSlip.replyChannel.bridgeTo.handler]を与える

そしてラウンドロビン方式での抽選です。そのため、次に BridgeHandler と JmsSendingMessageHandler を選択すると、次のようになります。

BridgeHandler を常に参照するために見逃した構成はありますか?

0 投票する
1 に答える
3085 参照

stomp - Spring Websocket URL は RequestMapping にヒットしますが、MessageMapping にはヒットしません

既存の Web アプリケーションで Websocket 構成をセットアップする際に問題があります。

コントローラ

クライアント

クライアントが接続を試みたときに表示されるのは、春が /mobile-socket を既存の Web アプリケーションの RequestMappings と照合しようとし、最終的に @RequestMapping("/{somevar}") を介してそれに一致するものをヒットすることです。

私は WebSockets を初めて使用しますが、エンドポイント登録がこれらの種類の接続のキャッチオールになると思いますか?

ヒットした誤った RequestMapping を削除した後でも、MessageMapping をヒットできないようです。ログにこれが表示されます

0 投票する
1 に答える
1761 参照

spring-security - Spring がデフォルトの simpSessionId を生成しないようにするにはどうすればよいですか?

websocket と STOMP を使用して春を設定しようとしています。

クライアントで、ヘッダー変数 'simpSessionId':%session_id% を送信します

ただし、メッセージを受信すると、Spring は常に提供されたヘッダーを nativeHeaders と呼ばれるキーに配置し、デフォルトの simpSessionId をヘッダー ルートに配置します。

代わりに提供されたセッションIDを春に取得させる方法はありますか?

編集済み

OK、携帯電話アプリとウェブサイトが同じサーバーにアクセスしています。携帯電話アプリで Webocket をセットアップできる必要があります。

携帯電話アプリで、従来の REST エンドポイントを介してサーバーにログインし、成功すると応答でセッション ID を受け取ります。

携帯電話で webstomp-client、Spring 4.1.9、Spring Security 4.1、Spring Session 1.2.0 を使用しています。

トークンを使用してソケット CONNECT で STOMP Websocket にログインするのが理想的ですが、webstomp-client は CONNECT でカスタム ヘッダーを渡さないため、現在のところそれが不可能であることを理解しています。

2 つの問題があります。

  • 後続のリクエストで REST ログインで取得したセッション ID を渡すにはどうすればよいですか? SPRING.SESSION.ID などのヘッダーを追加しようとしましたが、コードをステップ実行すると、メッセージ処理が常に 1、2 などにデフォルト設定されている simpSessionId に戻ることがわかります。 AbstractSessionWebsocketMessageBrokerConfigurer を拡張しようとしましたが、私のセッションIDを取得しません。常に空のsimpSessionAttributesを調べます。

  • コードは、Web ブラウザーのシナリオである http セッションを取得しようとしているようにも見えます。これは無視するしかないと思います

  • セッションの有効期限が切れます。有効期限が切れた可能性のあるセッションの戦略は何ですか? remember-me スタイルの認証トークンも渡すべきではないですか? それとも、永続的なステートレス セッションに依存する必要がありますか? これは私には明確ではなく、この側面は文書化されていないようです。

明らかに、私は何か非常に間違ったことをしています。これが私の設定です:

@Configuration @EnableRedisHttpSession(maxInactiveIntervalInSeconds=1200) public class SessionConfig {

}

===

==

====

=== 簡潔にするために、ここにあるいくつかの追加のセキュリティ構成を削除しました。

@Configuration @EnableWebSecurity @Order(100) public class SecurityConfig extends WebSecurityConfigurerAdapter {

}

===

0 投票する
1 に答える
382 参照

java - メッセージが受信されたことを確認する

クライアントでプッシュ通知を送信できるアプリケーションを作成する必要があります。ただし、クライアントが切断される場合があるため、通知を保存して、クライアントが再接続したときにクライアントに送信したいと考えています。

これを達成する方法はありますか?送信する前にクライアントが存在するかどうかを知る方法、または通知が十分に受信されているかどうかを知る方法が必要です。そして、私の通知はクライアント固有のものです。

多くのコードを披露することはできませんが、次のようなものを使用したいと思います:

spring-websocket と stomp-endpoint を使用しています。

ありがとうございました !

0 投票する
1 に答える
1625 参照

java - 内部 Spring Boot/Simple Broker トピックキューをサブスクライブする方法は?

/user/exchange/amq.direct/chat.messageトピック キューをサブスクライブしてメッセージに応答するボットを作成するには、内部スプリング ブート トピックをサブスクライブする必要があります。

}

私のコントローラー:

SimpMessagingTemplate でメッセージを入れた内部キュー/トピックをサブスクライブする方法は?

0 投票する
1 に答える
6887 参照

spring - Spring Sockjs Java クライアント メッセージ コンバーターの構成方法

STOMP を使用する SockJS Java クライアントが 1 つあります。このhttps://github.com/rstoyanchev/spring-websocket-portfolio/blob/master/src/test/java/org/springframework/samples/portfolio/web/load/StompWebSocketLoadTestClient.javaに基づいています。

私のコード:

次のように構成するときに確認してくださいstompClient

そして私はメッセージを送ります:

ここで、message は String クラス オブジェクトであり、サーバー側は次の変換エラーをスローしました。

エラーを観察します。

MessageConversionException: GenericMessage [payload=byte[33]、headers={simpMessageType=MESSAGE、stompCommand=SEND、nativeHeaders={destination=[/app/chatchannel] の [[B] から [org.gasmart.websocket.Message] に変換できません。 ]、content-type=[text/plain;charset=UTF-8]、content-length=[33]}、simpSessionAttributes={ip=/127.0.0.1:59629}、simpHeartbeat=[J@147a2bf、contentType=text /plain;charset=UTF-8, lookupDestination=/chatchannel, simpSessionId=79431feb8b5f4a9497492ccc64f8965f, simpDestination=/app/chatchannel}]

content-typeヘッダーが SockJS Java クライアントによって作成されていることを確認してください。

次のように構成stompClientした場合:

そして私はメッセージを送ります:

メッセージがバイト配列である場合、サーバーはエラーをスローしません。しかし、送信する前にすべての文字列をバイト配列に変換する必要があります。サーバーが SimpleMessageConverter で送信された同じ JSON オブジェクトと、StringMessageConverter で送信された 1 つの JSON オブジェクトを変換できる理由を理解したいと思います。

JavaScript クライアントと Java クライアントから送信された JSON を比較します。どちらも同じ JSON メッセージを送信します。次に、ChannelInterceptor を実装して、メッセージが対応するコントローラーに送信される前に受信したメッセージを出力します。

対応するサーバー コントローラーは次のとおりです。

Java 出力:

JavaScript: SockJS + Stomp.js:

違いを観察してください: content-type=[text/plain;charset=UTF-8]

Spring メッセージングには、さらに多くのコンバーターがあります。

Spring メッセージング コンバーター

このパッケージで SimpleMessageConverter と StringMessageConverter を確認できます。しかし、ByteArrayMessageConverter、CompositeMessageConverter、SmartMessageConverter などがあります。このコンバーターはどのように機能しますか?

Java クライアントから文字列を送信したい場合、どのコンバーターが必要ですか?

JScript クライアントから送信されたときにサーバーが JSON メッセージ {"from":"cliente1","text":"KIKO"} を変換できるのに、Java クライアントから送信されたときに変換できないのはなぜですか?

0 投票する
1 に答える
1545 参照

spring - SubProtocolWebSocketHandler と stompSubProtocolHandler を使用した例はありますか?

stompSubProtocolHandler と SubProtocolWebSocketHandler の使用例が見つかりませんか?

この SubProtocolWebSocketHandler クラスを拡張する必要がありますか?

StompSessionHandlerAdapter を拡張して動作している Sockjs Java クライアントのハンドラーを使用しています。接続、購読、メッセージの送信ができます:

プライベート静的クラス ProducerStompSessionHandler extends StompSessionHandlerAdapter { ...

}

しかし、別のユーザーが、SubProtocolWebSocketHandler と stompSubProtocolHandler という 2 つの実装があると言っているのを見ました。 https://stackoverflow.com/a/28306539/6243317

これらは、STOMP クライアントを介した Java Websocket の実装ですか? どのように使用しますか?利点?なぜこの実装を使用するのですか?

0 投票する
1 に答える
317 参照

java - Spring Cloud Stream プロジェクトには Web サーバー (Tomcat) が必要ですか?

Spring Cloud Streamを使用して、メッセージング駆動型のマイクロサービスを作成しています。

  • プロジェクト A: プロデューサー (Spring Cloud Stream、統合された tomcat とそのポート: 8080)
  • プロジェクト B: コンシューマー (Spring Cloud Stream、統合された tomcat とそのポート: 8081)
  • メッセージ ブローカー: RabbitMQ (amqp ポート: 5672)

私の質問は: プロジェクト A と B の場合、統合された Web サーバー/ポート (Tomcat) が必要ですか? それとも、一般的な Java アプリケーションで十分でしょうか?