java - Spring websocket端点并发送消息

标签 java spring websocket sockjs spring-websocket

我有一个 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(); //<--- have to send the message here

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

你应该注入(inject)这个:

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

并使用它发送消息:

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

Where do I have to specify the end point (secondep) when I send a message?

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

关于java - Spring websocket端点并发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25033997/

相关文章:

http - 用于后台处理的 Websockets

javascript - Node.js/Socket.io 中对旧版浏览器的 Web Socket 支持

java - 如何导出 .pem 文件中加密的私钥

Java 语句使 mouseClick 成为 Jpanel 中 MouseListener 的 mouseRelease

unit-testing - Spring Framework - 单元测试设计

java - 使用 Spring 的 @Value 注释插入时如何避免截断零前导数字?

Java - 到立交桥服务器的 HttpURLConnection

swing - JTable 行数限制

mysql - 提高 Laravel 的查询执行时间

java - Java一对一消息广播套接字