Пытаясь создать одностороннюю веб-розетку, клиент прослушивает только веб-сокет, но не видит никаких событий, заполняемых при попытке его отладки. Большинство примеров, которые я вижу, используют контроллер для отправки сообщения, мы используем POST API для создания сообщения, а затем транслируем его любым слушателям
WebSocketConfig
@Configuration
@EnableWebSocketMessageBroker
class WebSocketConfig : AbstractWebSocketMessageBrokerConfigurer() {
override fun configureMessageBroker(config: MessageBrokerRegistry) {
config.enableSimpleBroker("/topic", "/queue")
config.setApplicationDestinationPrefixes("/app")
}
override fun registerStompEndpoints(registry: StompEndpointRegistry) {
registry.addEndpoint("/messages").setAllowedOrigins("*")
registry.addEndpoint("/messages").setAllowedOrigins("*").withSockJS()
}
}
Сервис, который имеет дело с сообщения
@Component
class MessagesService {
@Autowired
private lateinit var eventsService: EventsService
@Autowired
private lateinit var messagesRepo: MessagesRepo
@Autowired
private lateinit var simpMessagingTemplate: SimpMessagingTemplate
/**
* Add a messsage to an event
*/
fun addMessage(eventId: UUID, text: String): Message? {
//TODO check if you were invited or public
val event = eventsService.getEvent(eventId)
val message = Message()
message.messsage = text
message.event = event
message.user = UserUtil.currentUser
messagesRepo.save(message)
try {
simpMessagingTemplate.convertAndSend("/messages", message)
} catch (e: Exception) {
e.printStackTrace()
}
return message
}
/**
* Gets all messages for an event
*/
fun getMessages(id: UUID): List<Message>? {
return messagesRepo.getMessages(id)
}
}
отправка сообщения не выдает никаких ошибок, и когда я устанавливаю sh соединение через что-то вроде https://www.websocket.org/echo.html, кажется, соединяется нормально, я не уверен, где смотреть, чтобы отладить это.
когда я подключаюсь, я вижу это в журналах, похоже, что соединение установлено
2020-01-21 15:26:28.562 DEBUG 22047 --- [nio-8080-exec-9] o.s.web.servlet.DispatcherServlet : GET "/messages?encoding=text", parameters={masked}
2020-01-21 15:26:28.564 DEBUG 22047 --- [nio-8080-exec-9] pertySourcedRequestMappingHandlerMapping : looking up handler for path: /messages
2020-01-21 15:26:28.565 DEBUG 22047 --- [nio-8080-exec-9] o.s.w.s.s.s.WebSocketHandlerMapping : Mapped to org.springframework.web.socket.server.support.WebSocketHttpRequestHandler@10acd880
2020-01-21 15:26:28.566 DEBUG 22047 --- [nio-8080-exec-9] o.s.w.s.s.s.WebSocketHttpRequestHandler : GET /messages
2020-01-21 15:26:28.570 DEBUG 22047 --- [nio-8080-exec-9] o.s.web.servlet.DispatcherServlet : Completed 101 SWITCHING_PROTOCOLS
2020-01-21 15:26:28.571 DEBUG 22047 --- [nio-8080-exec-9] o.apache.coyote.http11.Http11Processor : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@13faf299:org.apache.tomcat.util.net.NioChannel@28d71a47:java.nio.channels.SocketChannel[connected local=localhost/0:0:0:0:0:0:0:1:8080 remote=/0:0:0:0:0:0:0:1:59749]], Status in: [OPEN_READ], State out: [UPGRADING]
2020-01-21 15:26:28.573 DEBUG 22047 --- [nio-8080-exec-9] org.apache.tomcat.websocket.WsSession : Created WebSocket session [2]
2020-01-21 15:26:28.574 DEBUG 22047 --- [nio-8080-exec-9] s.w.s.h.LoggingWebSocketHandlerDecorator : New StandardWebSocketSession[id=b99dfad2-5d4f-af38-db6e-af4bf14c6e3c, uri=ws://localhost:8080/messages?encoding=text]
это полезная нагрузка, которую я пытаюсь отправить, она слишком большая, может быть?
{
"id": "2ce663d1-9e9a-42e0-bbad-211028e77332",
"user": {
"id": "bafcd9d6-451d-4f00-bedd-3f1a9baaa7b5",
"username": null,
"first": null,
"last": null,
"number": "555555555",
"photo": null,
"email": null,
"birthday": null,
"created_at": 1579639768481,
"updated_at": 1579639768481
},
"messsage": "hello world again!",
"created_at": 1579649686231,
"updated_at": 1579649686231
}