|
24 | 24 | import java.util.concurrent.BlockingQueue;
|
25 | 25 | import java.util.concurrent.ConcurrentHashMap;
|
26 | 26 | import java.util.concurrent.LinkedBlockingQueue;
|
27 |
| -import java.util.concurrent.TimeUnit; |
28 | 27 |
|
29 | 28 | import org.apache.commons.logging.Log;
|
30 | 29 | import org.apache.commons.logging.LogFactory;
|
@@ -232,7 +231,7 @@ public void stop() {
|
232 | 231 | }
|
233 | 232 | this.running = false;
|
234 | 233 | try {
|
235 |
| - this.tcpClient.close().await(5000, TimeUnit.MILLISECONDS); |
| 234 | + this.tcpClient.close().await(); |
236 | 235 | }
|
237 | 236 | catch (Throwable t) {
|
238 | 237 | logger.error("Failed to close reactor TCP client", t);
|
@@ -321,12 +320,13 @@ protected void handleInternal(Message<?> message, SimpMessageType messageType, S
|
321 | 320 | }
|
322 | 321 | else if (SimpMessageType.DISCONNECT.equals(messageType)) {
|
323 | 322 | RelaySession session = this.relaySessions.remove(sessionId);
|
324 |
| - if (session != null) { |
| 323 | + if (session == null) { |
325 | 324 | if (logger.isTraceEnabled()) {
|
326 | 325 | logger.trace("Session already removed, sessionId=" + sessionId);
|
327 | 326 | }
|
328 |
| - session.forward(message); |
| 327 | + return; |
329 | 328 | }
|
| 329 | + session.forward(message); |
330 | 330 | }
|
331 | 331 | else {
|
332 | 332 | RelaySession session = this.relaySessions.get(sessionId);
|
@@ -404,16 +404,9 @@ private void readStompFrame(String stompFrame) {
|
404 | 404 | }
|
405 | 405 | return;
|
406 | 406 | }
|
407 |
| - if (StompCommand.ERROR == headers.getStompCommand()) { |
408 |
| - if (logger.isDebugEnabled()) { |
409 |
| - logger.warn("STOMP ERROR: " + headers.getMessage() + ". Removing session id=" + this.sessionId); |
410 |
| - } |
411 |
| - relaySessions.remove(this.sessionId); |
412 |
| - } |
413 | 407 |
|
414 | 408 | headers.setSessionId(this.sessionId);
|
415 | 409 | message = MessageBuilder.fromMessage(message).copyHeaders(headers.toMap()).build();
|
416 |
| - |
417 | 410 | sendMessageToClient(message);
|
418 | 411 | }
|
419 | 412 |
|
@@ -455,25 +448,13 @@ public void forward(Message<?> message) {
|
455 | 448 | }
|
456 | 449 |
|
457 | 450 | private boolean forwardInternal(Message<?> message, TcpConnection<String, String> connection) {
|
458 |
| - |
459 |
| - try { |
460 |
| - if (logger.isTraceEnabled()) { |
461 |
| - logger.trace("Forwarding message to STOMP broker, message id=" + message.getHeaders().getId()); |
462 |
| - } |
463 |
| - byte[] bytes = stompMessageConverter.fromMessage(message); |
464 |
| - connection.send(new String(bytes, Charset.forName("UTF-8"))); |
465 |
| - } |
466 |
| - catch (Throwable ex) { |
467 |
| - logger.error("Forward failed message id=" + message.getHeaders().getId(), ex); |
468 |
| - try { |
469 |
| - connection.close(); |
470 |
| - } |
471 |
| - catch (Throwable t) { |
472 |
| - // ignore |
473 |
| - } |
474 |
| - sendError(this.sessionId, "Failed to forward message " + message + ": " + ex.getMessage()); |
475 |
| - return false; |
| 451 | + if (logger.isTraceEnabled()) { |
| 452 | + logger.trace("Forwarding message to STOMP broker, message id=" + message.getHeaders().getId()); |
476 | 453 | }
|
| 454 | + byte[] bytes = stompMessageConverter.fromMessage(message); |
| 455 | + connection.send(new String(bytes, Charset.forName("UTF-8"))); |
| 456 | + |
| 457 | + // TODO: detect if send fails and send ERROR downstream (except on DISCONNECT) |
477 | 458 | return true;
|
478 | 459 | }
|
479 | 460 |
|
|
0 commit comments