Spring integration 如何将stompsubtocolhandler与int-websocket:client容器一起使用

Spring integration 如何将stompsubtocolhandler与int-websocket:client容器一起使用,spring-integration,spring-websocket,Spring Integration,Spring Websocket,我有一个Websocket Stomp客户端的基本设置。问题在于StompSubtocolHandler、WebsocketInboundChannelAdapter和WebsocketOutboundMessageHandler将消息视为应用程序是服务器 根据消息是入站还是出站,消息将得到特殊处理 例如,我使用simpMessageType=“CONNECT”通过出站通道适配器发送消息,而StompSubtocolHandler的handleMessageToClient[谢天谢地]没有执行它

我有一个Websocket Stomp客户端的基本设置。问题在于StompSubtocolHandler、WebsocketInboundChannelAdapter和WebsocketOutboundMessageHandler将消息视为应用程序是服务器

根据消息是入站还是出站,消息将得到特殊处理

例如,我使用simpMessageType=“CONNECT”通过出站通道适配器发送消息,而StompSubtocolHandler的handleMessageToClient[谢天谢地]没有执行它应该对CONNECT消息执行的操作,因为它不希望发送这样的消息

然后,一条已连接的[CONNECT_ACT]消息返回,并由StompSubscriptColHandler的handleMessageFromClient函数处理。此函数不知道如何处理此连接的帧,它尝试将消息发送到outputChannel,而不是publishEvent。除了WebsocketInboundChannelAdapter知道simpMessageTypes并忽略消息(因为它不是“消息”类型)之外,这是正常的

我觉得一定有某种客户端websocket通道适配器我不知道。我还觉得必须有某种StompSubtocolHandler,它的设计也考虑到了客户机。使用int-websocket:client容器的示例应用程序并不多,我不知道该怎么做

有人能帮我理解作为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 WebSocket目前没有客户端支持,因此我们目前仅支持服务器端

不过,它刚刚(上周)发布,将于春季4.2发布。我们还将为SpringIntegration4.2添加适当的支持


JIRA问题有一个到提交的链接,带有测试等。

好吧,我想确认
连接
作为从
客户端发送到
的消息工作正常

我们刚刚错过了处理
StompCommand.CONNECTED
WebSocketInboundChannelAdapter
client
端,它看起来应该作为
SessionConnectedEvent
发出,作为服务器的确认

另一个丢失的STOMP帧是
StompCommand.receive
,它应该像一些新的
StompReceiptEvent
一样发出

请随意提出一个问题,我们将在随后的讨论中添加Java客户机

我们可以使用一些新的
int-STOPM
解决与作为客户端的STOPM的更平滑集成问题

更新

关于此事的JIRA:
要使用适配器完全支持STOMP协议,我们还有一个问题:

spring integration现在支持STOMP客户端吗?是否有任何关于如何做到这一点的工作示例或文档?*通过weboscket stomp client,而不仅仅是stomp clientYes;看<代码>要配置STOMP。。。让我们从STOMP客户机对象开始。Spring框架提供了以下实现:…
噢!我以前看过文件。我跳过了第一部分,认为它一直只支持tcp。谢谢你的及时回复!