奇怪的行为-Websocket Spring-使用侦听/通知Postgresql向用户发送消息

时间:2019-01-07 09:25:35

标签: spring postgresql spring-boot websocket

我的Spring Boot Websocket设置出现异常行为。 有时它起作用,有时却不起作用,只是感觉是随机的。 我尝试了几种设置,但都没有得到证实:我将最后一行代码移到了应用程序主类中的命令行运行器中,最后选择的是带有@Component批注的其他类。

我的设置如下:我使用jdbc驱动程序(pgjdbc-ng)来使用postgres的listen notify函数。我有一个函数和一个触发器,用于监听特定postgres表的插入。如果发生任何情况,则通过websocket发送通知。另一个是一个有角度的应用程序,它使用ng2-stompjs侦听/ topic / notificari的通知。我没有发布代码,因为通知不会很快结束,角度不是问题。

亲切的问候,

这是我的WebSocketConfiguration

app.yaml

我正在使用类ListenNotify和JDBC驱动程序pgjdbc-ng连接到PostgreSQL数据库并使用侦听通知功能

runtime: python37

}

最后,这是实例化ListenNotify对象并侦听postgres中可能触发必须使用websocket发送的通知的事件的代码。

Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
    registry.enableSimpleBroker("/topic", "/queue", "/user", "/notificari");
    registry.setApplicationDestinationPrefixes("/app");
    registry.setUserDestinationPrefix("/user");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/socket").setAllowedOrigins("*")
            .setHandshakeHandler(new CustomHandshakeHandler());
}

}

1 个答案:

答案 0 :(得分:0)

我没有使用Spring,所以无法测试您的代码。这是我的测试版。我认为这总结了差异-

  1. 改为尝试使用资源块。这将在破坏类时关闭连接。
  2. 将while(true)移动到侦听器上的try块中,以便 try块中的行永远不会超出执行范围。
  3. while(true)正在阻塞,因此它需要在另一个线程上。 ListenNotify extends Thread

我确信还有其他实现方式,也欢迎对我的任何假设进行更正。

我经过测试且正在运行的代码在此答案JMS Websocket delayed delivery中。