나는 외부 브로커로 RabbitMQ를 사용하여 봄 4에서 웹 소켓 지원을 구성하려고 만하고 최대한 빨리 RabbitMQ로 전환, 나는 클라이언트의 시작에 다음과 같은 오류가 발생합니다 :SpringB에서 RabbitMQ와 같은 외부 브로커와 함께 convertAndSendToUser()를 어떻게 사용합니까?
'/user/queue/changes' is not a valid destination.
Valid destination types are: /temp-queue, /exchange, /topic, /queue, /amq/queue, /reply-queue/.
에 서버 convertAndSendToUser
사용하고 간단한 브로커와 함께 잘 작동하지만 RabbitMQ로 전환하자마자이 오류가 발생합니다. RabbitMQ는 정상적인 주제의 브로드 캐스트에 잘 작동합니다. 단지 /user
채널이 넘어갑니다.
/user
을 RabbitMQ와 함께 사용하려면 특별한 작업을 수행해야합니까?
편집
웹 소켓 구성을 포함하는 내 WebSocketConfig
몇 가지 사용자 정의한 꽤 표준 spring-session과 통합하는 것입니다
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractSessionWebSocketMessageBrokerConfigurer<ExpiringSession> {
@Override
public void configureStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/changes").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
//config.enableSimpleBroker("/queue", "/topic");
StompBrokerRelayRegistration r = config.enableStompBrokerRelay("/user", "/topic");
try {
String rabbitUrl = System.getenv("CLOUDAMQP_URL");
if(rabbitUrl != null) {
log.info("RABBIT URL detected: " + rabbitUrl);
URI uri = new URI(rabbitUrl);
String host = uri.getHost();
String login = uri.getUserInfo().split(":",2)[0];
String passCode = uri.getUserInfo().split(":",2)[1];
String vhost = uri.getPath().substring(1);
r.setRelayHost(host);
r.setSystemLogin(login);
r.setSystemPasscode(passCode);
r.setClientLogin(login);
r.setClientPasscode(passCode);
r.setVirtualHost(vhost);
}
} catch(Exception e) {
log.error("Error setting up RabbitMQ", e);
}
config.setApplicationDestinationPrefixes("/app");
}
}
누가이/user/queue/channel 채널을 만드나요? 연결하기 전에 생성해야합니다. – mavarazy
websocket 구성을 공유하십시오. –
@mavarazy - docs에 따라'convertAndSendToUser (userId, "/ queue/loop-changes)'를 호출하고 Spring은'/ user'을 자동으로 앞에 붙입니다. RabbitMQ에서'/ user' 대상을 어떻게 든 생성해야한다고 말하는 것입니까 ? –