我在我的 Spring Boot 应用程序中为 websocket 配置外部代理(amazonMQ)中继。
在启动配置似乎很好,继电器按照下面的日志连接。我用错误的 URL 进行了测试,我显然得到了 UnknownHostException,所以我认为我的主机配置很好。
我已经使用本地 ActiveMQ 对此进行了测试,并且我的测试设置运行良好,因此消息流也没有问题。我可以看到连接的消费者和在管理控制台中创建的主题。
这是我基于Spring Documentation here的代码!
当我尝试连接客户端时,我收到连接消息,然后是同一会话的断开连接。
如果是 SSL 的问题,那么我在 Spring 文档中找不到配置 SSL 的参考。
private static final String HOST = "b-xxxxxxxxxxxxxxxxxx.mq.aws-region.amazonaws.com";
private static final int PORT = 61617;
private static final String USER = "username-here";
private static final String PASSCODE = "passcode-here";
private ReactorNettyTcpClient<byte[]> createTcpClient() {
return new ReactorNettyTcpClient(HOST, PORT, new StompReactorNettyCodec());
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableStompBrokerRelay()
.setRelayHost(HOST)
.setRelayPort(PORT)
.setSystemLogin(USER)
.setSystemPasscode(PASSCODE)
.setClientLogin(USER)
.setClientPasscode(PASSCODE)
.setTcpClient(createTcpClient());
registry.setApplicationDestinationPrefixes("/app")
.setPathMatcher(new AntPathMatcher("."));
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws")
.setAllowedOrigins("*").withSockJS();
}
@Override
public void configureClientInboundChannel(ChannelRegistration registration) {
AuthenticatedUser a = null;
registration.interceptors(new ChannelInterceptorAdapter() {
@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {
StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
log.info(" accessor {}", accessor);
return message;
}
});
启动时记录
Starting...
Connecting "system" session to
stomp://XXXXXXXXXXXXXXXXX.mq.XXXXXX.amazonaws.com:61617
Started.
Tomcat started on port(s): 8080 (http) with context path ''
客户端尝试连接时记录
accessor StompHeaderAccessor [headers={simpMessageType=CONNECT,
stompCommand=CONNECT, nativeHeaders={accept-version=[1.1,1.0], heart-beat=[10000,10000]},
simpSessionAttributes={}, simpHeartbeat=[J@7070e97e,
simpSessionId=52usza4t}]
accessor StompHeaderAccessor [headers={simpMessageType=DISCONNECT,
stompCommand=DISCONNECT, simpSessionAttributes={},
simpSessionId=52usza4t}]
有人遇到过类似的事情吗?提前致谢 :)