我有一个Websocket Stomp Client的基本设置。问题是StompSubProtocolHandler,WebsocketInboundChannelAdapter和WebsocketOutboundMessageHandler将消息视为应用程序是服务器。
根据邮件是入站还是出站,邮件会得到特殊处理。
例如,我通过带有simpMessageType =“CONNECT”的出站通道适配器发送消息,并且StompSubProtocolHandler的handleMessageToClient [谢天谢地]不执行它应该对CONNECT消息执行的操作,因为它不期望这样做要发送的消息。
然后返回CONNECTED [CONNECT_ACT]消息并由StompSubProtcolHandler的handleMessageFromClient函数处理。此函数不知道如何处理此CONNECTED帧,而不是publishEvent,它尝试将消息发送到outputChannel。这可以,但WebsocketInboundChannelAdapter知道simpMessageTypes并忽略该消息,因为它不是“MESSAGE”类型。
我觉得必须有一些我不知道的客户端websocket通道适配器。我也觉得必须有一些StompSubProtocolHandler,它也是为客户设计的。没有很多使用int-websocket的示例应用程序:客户端容器,我不知道该怎么做。
有人可以帮我理解我需要做什么来处理作为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" />
答案 0 :(得分:1)
Spring-WebSockets目前还没有客户端支持,因此我们目前仅限于支持服务器端。
然而,它只是committed to master(上周),将在春季4.2。我们还将为Spring Integration 4.2添加适当的支持。
JIRA问题有一个指向提交的链接,包括测试等。
答案 1 :(得分:0)
好吧,我想确认CONNECT
作为来自<int-websocet:outbound-channel-adapter>
方client
的消息的效果很好。
我们刚刚错过了StompCommand.CONNECTED
来自WebSocketInboundChannelAdapter
的{{1}}处理client
,看起来应该作为SessionConnectedEvent
作为来自服务器的确认发出。< / p>
另一个错过的STOMP帧是StompCommand.RECEIPT
,应该像新的StompReceiptEvent
一样发出。
随时可以就此问题提出JIRA问题,之后我们会先查看stomp-chat以添加Java客户端。
与STOPM进行更顺畅的集成,我们可以通过一些新的int-stopm
components来解决这个问题。
<强>更新强>
关于此事的JIRA:https://jira.spring.io/browse/INT-3686 要使用适配器完全支持STOMP协议,我们还有另一张票:https://jira.spring.io/browse/INT-3685