我如何将 StompSubProtocolHandler 与 int-websocket:client-container 一起使用
How do I use the StompSubProtocolHandler with the int-websocket:client-container
我有一个 Websocket Stomp 客户端的基本设置。问题在于 StompSubProtocolHandler、WebsocketInboundChannelAdapter 和 WebsocketOutboundMessageHandler 将消息视为应用程序是服务器。
根据邮件是入站还是出站邮件进行特殊处理。
例如,我通过带有 simpMessageType="CONNECT" 的出站通道适配器发送消息,而 StompSubProtocolHandler 的 handleMessageToClient [谢天谢地] 没有执行它应该对 CONNECT 消息执行的操作,因为它确实不要指望发送这样的消息。
然后 CONNECTED [CONNECT_ACT] 消息返回并由 StompSubProtcolHandler 的 handleMessageFromClient 函数处理。此函数不知道如何处理此 CONNECTED 帧,它尝试将消息发送到 outputChannel 而不是 publishEvent。这会没问题,除非 WebsocketInboundChannelAdapter 知道 simpMessageTypes 并忽略消息,因为它不是 "MESSAGE" 类型。
我觉得一定有某种我不知道的客户端 websocket 通道适配器。我还觉得必须有某种 StompSubProtocolHandler 是为客户设计的。使用 int-websocket:client-container 的示例应用程序并不多,我不知所措。
任何人都可以帮助我理解作为 websocket 客户端我需要做什么来处理 STOMP 消息吗?
<int-websocket:client-container id="websocketClientContainer"
client="websocketStompClient"
uri="ws://localhost:8080/stomp" />
<bean id="stompSubProtocolHandler"
class="org.springframework.web.socket.messaging.StompSubProtocolHandler"/>
<int-websocket:inbound-channel-adapter
channel="receiveMessage"
container="websocketClientContainer"
default-protocol-handler="stompSubProtocolHandler"/>
<int:channel id="receiveMessage" />
<int:service-activator ref="websocketStompClient"
method="receiveNotification"
input-channel="receiveMessage"
output-channel="nullChannel" />
<int-event:inbound-channel-adapter
event-types="org.springframework.web.socket.messaging.AbstractSubProtocolEvent"
payload-expression="message"
channel="routeStompEvents"/>
<int:channel id="routeStompEvents" />
<int:router ref="StompInboundMessageTypeRouter"
method="routeStompMessage"
input-channel="routeStompEvents"
default-output-channel="nullChannel"
resolution-required="false" />
Spring-WebSockets 目前没有客户端支持,因此我们目前仅限于支持服务器端。
但是,它刚刚 committed to master(上周)并将在 Spring 4.2 中。我们还将为 Spring Integration 4.2 添加适当的支持。
JIRA 问题有一个 link 提交,包含测试等
好吧,我想确认 CONNECT
作为从 client
方发送给 <int-websocet:outbound-channel-adapter>
的消息效果很好。
我们刚刚错过了从 client
端处理 WebSocketInboundChannelAdapter
中的 StompCommand.CONNECTED
,这看起来应该作为 SessionConnectedEvent
作为来自服务器的确认发出.
另一个错过的 STOMP 帧是 StompCommand.RECEIPT
,它应该像一些新的 StompReceiptEvent
.
一样发出
之后随时提出 JIRA issue on the matter, and we'll take a look to the stomp-chat 以添加 Java 客户端。
与作为客户端的 STOPM 更顺畅地集成,我们可以使用一些新的 int-stopm
components。
更新
关于此事的 JIRA:https://jira.spring.io/browse/INT-3686
为了使用适配器完全支持 STOMP 协议,我们还有另一张票:https://jira.spring.io/browse/INT-3685
我有一个 Websocket Stomp 客户端的基本设置。问题在于 StompSubProtocolHandler、WebsocketInboundChannelAdapter 和 WebsocketOutboundMessageHandler 将消息视为应用程序是服务器。
根据邮件是入站还是出站邮件进行特殊处理。
例如,我通过带有 simpMessageType="CONNECT" 的出站通道适配器发送消息,而 StompSubProtocolHandler 的 handleMessageToClient [谢天谢地] 没有执行它应该对 CONNECT 消息执行的操作,因为它确实不要指望发送这样的消息。
然后 CONNECTED [CONNECT_ACT] 消息返回并由 StompSubProtcolHandler 的 handleMessageFromClient 函数处理。此函数不知道如何处理此 CONNECTED 帧,它尝试将消息发送到 outputChannel 而不是 publishEvent。这会没问题,除非 WebsocketInboundChannelAdapter 知道 simpMessageTypes 并忽略消息,因为它不是 "MESSAGE" 类型。
我觉得一定有某种我不知道的客户端 websocket 通道适配器。我还觉得必须有某种 StompSubProtocolHandler 是为客户设计的。使用 int-websocket:client-container 的示例应用程序并不多,我不知所措。
任何人都可以帮助我理解作为 websocket 客户端我需要做什么来处理 STOMP 消息吗?
<int-websocket:client-container id="websocketClientContainer"
client="websocketStompClient"
uri="ws://localhost:8080/stomp" />
<bean id="stompSubProtocolHandler"
class="org.springframework.web.socket.messaging.StompSubProtocolHandler"/>
<int-websocket:inbound-channel-adapter
channel="receiveMessage"
container="websocketClientContainer"
default-protocol-handler="stompSubProtocolHandler"/>
<int:channel id="receiveMessage" />
<int:service-activator ref="websocketStompClient"
method="receiveNotification"
input-channel="receiveMessage"
output-channel="nullChannel" />
<int-event:inbound-channel-adapter
event-types="org.springframework.web.socket.messaging.AbstractSubProtocolEvent"
payload-expression="message"
channel="routeStompEvents"/>
<int:channel id="routeStompEvents" />
<int:router ref="StompInboundMessageTypeRouter"
method="routeStompMessage"
input-channel="routeStompEvents"
default-output-channel="nullChannel"
resolution-required="false" />
Spring-WebSockets 目前没有客户端支持,因此我们目前仅限于支持服务器端。
但是,它刚刚 committed to master(上周)并将在 Spring 4.2 中。我们还将为 Spring Integration 4.2 添加适当的支持。
JIRA 问题有一个 link 提交,包含测试等
好吧,我想确认 CONNECT
作为从 client
方发送给 <int-websocet:outbound-channel-adapter>
的消息效果很好。
我们刚刚错过了从 client
端处理 WebSocketInboundChannelAdapter
中的 StompCommand.CONNECTED
,这看起来应该作为 SessionConnectedEvent
作为来自服务器的确认发出.
另一个错过的 STOMP 帧是 StompCommand.RECEIPT
,它应该像一些新的 StompReceiptEvent
.
之后随时提出 JIRA issue on the matter, and we'll take a look to the stomp-chat 以添加 Java 客户端。
与作为客户端的 STOPM 更顺畅地集成,我们可以使用一些新的 int-stopm
components。
更新
关于此事的 JIRA:https://jira.spring.io/browse/INT-3686 为了使用适配器完全支持 STOMP 协议,我们还有另一张票:https://jira.spring.io/browse/INT-3685