- 27 9月, 2013 4 次提交
-
-
由 Andy Wilkinson 提交于
Previously, when a broker heartbeat was mnissed, the STOMP connection would be left in a semi-disconnected state such that, for example, the read and write idle callbacks would still be active, even though the underlying TCP connection had been nulled out. As part of disconnecting the STOMP connection, this commit closes the underlying TCP connection when a heartbeat's missed which cancels the read and write idle callbacks. It also now copes with the underlying TCP connection being null when sending a heartbeat to the broker. This protects again a race condition between the write idle callback being fired, such that a heartbeat needs to be sent, and the connection being nulled out due to it being closed.
-
由 Andy Wilkinson 提交于
Previously, the STOMP broker relay did not support heart-beats. It sent 0,0 in the heart-beats header for its own CONNECTED message, and set the heart-beats header to 0,0 when it was forwarding a CONNECTED from from a client to the broker. The broker relay now supports heart-beats for the system relay session. It will send heart-beats at the send interval that's been negotiated with the broker and will also expect to receive heart-beats at the receive interval that's been negotiated with the broker. The receive interval is multiplied by a factor of three to satisfy the STOMP spec's suggestion of lenience and ActiveMQ 5.8.0's heart-beat behaviour (see AMQ-4710). The broker relay also supports heart-beats between clients and the broker. For any given client's relay session, any heart-beats received from the client are forwarded on to the broker and any heart-beats received from the broker are sent back to the client. Internally, a heart-beat is represented as a Message with a byte array payload containing the single byte of new line ('\n') character and 'empty' headers. SubscriptionMethodReturnValueHandler has been updated to default the message type to SimpMessageType.MESSAGE. This eases the distinction between a heartbeat and a message that's been created from a return value from application code.
-
由 Andy Wilkinson 提交于
Before this change, the StompProtocolHandler always responded to clients with a CONNECTED frame, while the STOMP broker relay independantly forwarded the client CONNECT to the broker and waited for the CONNECTED frame back. That meant the relay had to buffer client messages until it received the CONNECTED response from the message broker. This change ensures that clients wait for a CONNECTED frame from the message broker. The broker relay forwards the CONNECT frame to the broker. The broker responds with a CONNECTED frame, which the relay then forwards to the client. As a result, a (well-written) client will not send any messages to the relay until the connection to the broker is fully established. The StompProtcolHandler can now be configured whether to send CONNECTED frame back. By default that is off. So when using the simple broker, the StompProtocolHandler can still respond with CONNECTED frames. The relay's handling of a connection being dropped has also been improved. When a connection for a client relay session is dropped an ERROR frame will be sent back to the client. If a connection is closed as part of a DISCONNECT frame being sent, no ERROR frame is sent back to the client. When the connection for the system relay session is dropped, an event is published indicating that the broker is unavailable. Reactor's TcpClient will then attempt to re-restablish the connection.
-
由 Andy Wilkinson 提交于
Previously, the broker relay's TCP client used Reactor's built in delimited codec as part of its parsing of STOMP frames. \0 was used as the delimiter. This worked for most STOMP frames but, crucially, not for frames with a body that contained \0: when such a frame was received it would be truncated. This commit adds a custom codec that parses STOMP frames more intelligently. It honours the content-length header allowing it to correctly parse frames with a body that contains \0. The codec largely delegates to two new classes: StompEncoder and StompDecoder. For consistency, code that previously used StompMessageConverter has been reworked to use these new encoder and decoder classes. Issue: SPR-10818
-
- 09 9月, 2013 1 次提交
-
-
由 Rossen Stoyanchev 提交于
-
- 08 9月, 2013 1 次提交
-
-
由 Sam Brannen 提交于
-
- 07 9月, 2013 1 次提交
-
-
由 Rossen Stoyanchev 提交于
Issue: SPR-10888
-
- 06 9月, 2013 1 次提交
-
-
由 Rossen Stoyanchev 提交于
-
- 04 9月, 2013 3 次提交
-
-
由 Rossen Stoyanchev 提交于
Issue: SPR-10703
-
由 Juergen Hoeller 提交于
Issue: SPR-10880
-
由 Rossen Stoyanchev 提交于
The @Bean method now returns WebSocketHandler allowing it to be decorated via WebSocketHandlerDecorator.
-
- 03 9月, 2013 2 次提交
-
-
由 Rossen Stoyanchev 提交于
After this change, annotated message handling methods configured to use a destination prefix (e.g. "/app") no longer have to include the prefix in their mapping. For example if a client sends a message to "/app/foo" the annotated methods should be mapped with @MessageMapping("/foo").
-
由 Rossen Stoyanchev 提交于
-
- 02 9月, 2013 4 次提交
-
-
由 Rossen Stoyanchev 提交于
-
由 Rossen Stoyanchev 提交于
-
由 Rossen Stoyanchev 提交于
Ensure configuration provided for WebSocketHandler's (eg interceptors, or HandshakeHandler) are passed on to the SockJsService if congiured. Better separate Servlet-specific parts of the configuration to make it more obvious where non-Servlet alternatives could fit in. Add more tests. Improve WebSocket integration tests.
-
由 Rossen Stoyanchev 提交于
Issue: SPR-10880
-
- 30 8月, 2013 1 次提交
-
-
由 Rossen Stoyanchev 提交于
-
- 29 8月, 2013 6 次提交
-
-
由 Rossen Stoyanchev 提交于
-
由 Andy Wilkinson 提交于
Previously, the negotiated version was included in the CONNECTED frame using the accept-version header. This is incorrect. The version header should be used.
-
由 Rossen Stoyanchev 提交于
Issue: SRP-10868
-
由 Rossen Stoyanchev 提交于
Issue: SPR-10605
-
由 Rossen Stoyanchev 提交于
Issue: SPR-10835
-
由 Rossen Stoyanchev 提交于
Issue: SPR-10866
-
- 28 8月, 2013 5 次提交
-
-
由 Rossen Stoyanchev 提交于
-
由 Rossen Stoyanchev 提交于
Issue: SPR-10835
-
由 Rossen Stoyanchev 提交于
-
由 Rossen Stoyanchev 提交于
-
由 Jan Machacek 提交于
-
- 20 8月, 2013 6 次提交
-
-
由 Rossen Stoyanchev 提交于
-
由 Rossen Stoyanchev 提交于
-
由 Andy Wilkinson 提交于
Use a single class for the broker availability event with a boolean that indicates whether or not the broker is available, rather than one event for an available broker and one event for an unavailable broker. Publish broker availability events in SimpleBrokerMessageHandler so that it can be used as a drop-in replacement for StompBrokerRelayMessageHandler.
-
由 Andy Wilkinson 提交于
Upgrade to Reactor snapshot builds to take advantage of TcpClient's reconnect support that was added post-M1. Now, the system relay session will try every 5 seconds to establish a connection with the broker, both when first connecting and in the event of subsequently becoming disconnected. A more sophisticated reconnection policy, including back off and failover to different brokers, is possible with the Reactor API. We may want to enhance the relay's reconnection policy in the future. Typically, a broken connection is identified by the failure to forward a message to the broker. As things stand, the message id then discarded. Any further messages that are forwarded before the connection's been re-established are queued for forwarding once the CONNECTED frame's been received. We may want to consider also queueing the message that failed to send, however we would then need to consider the possibility of the message itself being what caused the broker to close the connection and resending it would simply cause the connection to be closed again.
-
由 Andy Wilkinson 提交于
Components that are using a StompBrokerRelayMessageHandler may want to know whether or not the broker's unavailable. If they're sending messages to the relay via an asynchronous channel there's currently no way for them to find this out. This commit enhances StompBrokerRelayMessageHandler to publish application events when the broker's availability changes: BrokerBecameAvailableEvent and BrokerBecameUnavailableEvent. Irrespective of the number of relay sessions only a single event is published for each change in the broker's availability.
-
由 Andy Wilkinson 提交于
-
- 14 8月, 2013 1 次提交
-
-
由 Rossen Stoyanchev 提交于
Update methods available on WebSocketSession interface. Introduce DelegatingWebSocketSession interface.
-
- 03 8月, 2013 1 次提交
-
-
由 Rossen Stoyanchev 提交于
A getCookies method is now available on ServerHttpRequest with one ServletServerCookie implementation that wraps a Servlet cookie. The SockJS service makes use of this to check for an existing session cookie in the request.
-
- 02 8月, 2013 1 次提交
-
-
由 Andy Wilkinson 提交于
Add SubProtocolHandler to encapsulate the logic for using a sub-protocol. A SubProtocolWebSocketHandler is also provided to delegate to the appropriate SubProtocolHandler based on the negotiated sub-protocol value at handshake. StompSubProtocolHandler provides handling for STOMP messages. Issue: SPR-10786
-
- 25 7月, 2013 1 次提交
-
-
由 Andy Wilkinson 提交于
SI's BeanFactoryChannelResolver was BeanFactoryAware. This commit brings Spring's BeanFactoryMessageChannelDestinationResolver in line with the old SI class.
-
- 22 7月, 2013 1 次提交
-
-
由 Rossen Stoyanchev 提交于
-