我有一个 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
但是这不起作用。 问题是:
- 如何发送消息?
- 发送消息时,我必须在哪里指定终点(秒)?
谢谢!感谢任何帮助!
最佳答案
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/