繁体   English   中英

Spring WebSocket结束点并发送消息

[英]Spring websocket end-poind and send message

我有一个JMS侦听器,我必须接收消息,对其进行处理,然后使用websocket将其重定向到页面。

好吧,我只是对配置感到困惑,已经配置了WebSocketConfig:

@Configuration
@EnableWebSocketMessageBroker
@EnableScheduling
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
   @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic", "/queue");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws/firstep/").withSockJS();
        registry.addEndpoint("/ws/secondep/").withSockJS();
    }

这应该是正确的,然后我的网页是:

var socket = new SockJS("/myapp-web/api/ws/secondep/",undefined,options);
    var stompClient = Stomp.over(socket);
    stompClient.connect({
        company : "xxx"
    }, function(frame) {
        console.log('Connected: ' + frame);

          stompClient.subscribe('/topic/register', function(message){ 
            console.log('message: ' + message);     
          });

        stompClient.subscribe('/topic/update', function(message){ 
            console.log('message: ' + message);     
        });

并且连接正常。

现在,在我的jms侦听器上,我尝试以这种方式发送消息:

public class ImporterListener implements MessageListener {

    Logger logger = LoggerFactory.getLogger(ImporterListner.class);
    @SendTo("/topic/register")
    private String TestMessage() {
        return "TestMessage";
    }

    @Override
    public void onMessage(Message message) {
        logger.info("Request on message");
        if (message instanceof MapMessage) {
            MapMessage t = (MapMessage) message;
             TestMessage(); //<--- have to send the message here

但这是行不通的。 问题是:

  1. 如何发送信息?
  2. 发送消息时,我必须在哪里指定终点(秒)?

谢谢! 任何帮助表示赞赏!

的TestMessage(); // <---必须在此处发送消息

不,它没有发送,因为您使用的是同一个类中的方法,但是@SendTo使您的ImporterListener作为代理,而Advice仅适用于另一个组件中的方法。

您应该注入:

@Autowired
@Qualifier("brokerMessagingTemplate")
private MessageSendingOperations brokerMessagingTemplate;

并使用以下信息发送消息:

brokerMessagingTemplate.convertAndSend("/topic/register", "TestMessage");

发送消息时,我必须在哪里指定终点(秒)?

某些POJO方法上的@MessageMapping("/ws/secondep")用于从客户端接收消息。 它不是用于发送部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM