Push-сообщение с Java с помощью Spring 4 WebSocket

Я хочу отправлять сообщения с Java клиентам WebSocket. Я успешно отправил js-клиент на сервер и получил сообщение обратно на 2 js-клиентах, поэтому код на стороне клиента работает нормально.

Моя проблема в том, что я хотел бы инициировать отправку, когда в приложении Java происходят события. Так, например, каждый раз, когда размещается 10 заказов, отправляйте сообщение всем подписанным клиентам. Это возможно?

Моя текущая конфигурация:

<websocket:message-broker application-destination-prefix="/app">
   <websocket:stomp-endpoint path="/hello">
        <websocket:sockjs/>
   </websocket:stomp-endpoint>
   <websocket:simple-broker prefix="/topic"/>
</websocket:message-broker>

@Controller
public class MessageController {
    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Greeting greeting() throws Exception {
       return new Greeting("Hello world");
    }
}

Я бы хотел сделать что-то вроде этого:

public class OrderManager {
    @Autowired MessageController messageController;
    int orderCount = 0;

    public void processOrder(Order o) {
        orderCount++;
        if(orderCount % 10 == 0)
            messageController.greeting();
    }
}

и все подписанные клиенты на веб-сокет получают сообщение.


person James    schedule 24.06.2014    source источник


Ответы (1)


Вы можете использовать SimpMessagingTemplate. Он автоматически регистрируется. Просто autowire это в любом компоненте Spring, который вы хотите.

@Autowired
private SimpMessagingTemplate template;
...
this.template.convertAndSend("/topic/greetings", text);
person Evgeni Dimitrov    schedule 24.06.2014
comment
Я реализовал ваш подход и теперь получаю исключение «Не удалось запустить bean-компонент subProtocolWebSocketHandler». Я написал об этом сообщение. Пожалуйста, посмотрите, можете ли вы. Спасибо. stackoverflow.com/questions/37638396/ - person An Illusion; 05.06.2016
comment
привет, я проделал тот же процесс, но мой веб-сокет не вызывается, у меня нет ошибок. - person Afroz Shaikh; 12.08.2016