java - 使用 StompClient 在 Spring WebSocket 上传递消息时出错

标签 java spring websocket stomp spring-websocket

我正在尝试向我的主题发送消息,但问题是当我发送消息时没有任何反应......我正在使用 apache tomcat 7.0.53

UPDATE: 04/15: Link to test:

http://ec2-54-187-72-145.us-west-2.compute.amazonaws.com:8080/kupo

Login: admin

Password: admin

LINK TO ACCESS TOMCAT LOG:

http://ec2-54-187-72-145.us-west-2.compute.amazonaws.com:28778/

P.S: You need to checked the combobox on the sidebar to start watch the messages

Github 链接:https://github.com/tiarebalbi/kupo

日志:

DEBUG - gWebSocketHandlerDecorator - Connection established, SockJS session id=_mqg8qer, uri=/kupo/application/807/_mqg8qer/websocket
DEBUG - StompDecoder               - Decoded [Payload byte[0]][Headers=    {stompCommand=CONNECT, nativeHeaders={heart-beat=[10000,10000], accept-version=[1.1,1.0]},     simpMessageType=CONNECT, id=e79a615e-5522-a0f9-aecf-6ea5a54b3d9b, timestamp=1397013491497}]
DEBUG - StompEncoder               - Encoded STOMP command=CONNECTED headers={user-name=[balbi], heart-beat=[0,0], version=[1.1]}
DEBUG - StompDecoder               - Decoded [Payload byte[0]][Headers={stompCommand=SUBSCRIBE, nativeHeaders={id=[sub-0], destination=[/topic/greetings]}, simpMessageType=SUBSCRIBE, simpSubscriptionId=sub-0, simpDestination=/topic/greetings, id=42c2019d-96a0-95f0-29aa-2bcc62d6d721, timestamp=1397013491501}]

代码:

@Service
public class ExampleServiceImpl implements ApplicationListener<BrokerAvailabilityEvent> {

private AtomicBoolean brokerAvailable = new AtomicBoolean();

@Autowired
private MessageSendingOperations<String> messagingTemplate;

@Override
public void onApplicationEvent(BrokerAvailabilityEvent event) {
    this.brokerAvailable.set(event.isBrokerAvailable());
}

@Scheduled(fixedDelay=3000)
public void testing() {
    if (this.brokerAvailable.get()) {
        this.messagingTemplate.convertAndSend("/topic/greetings", "Testing....");
    }
}

Javascript 连接:

        var socket = new SockJS('/kupo/application'); // <!-- My endpoint
        var stompClient = Stomp.over(socket);
        stompClient.connect({}, function(frame) {
            
            var username = frame.headers['user-name'];
            console.log("User connected: " + username);
            
            stompClient.subscribe("/topic/greetings", function(message) { // <-- Topic where I want to received the message
                console.log("TOPIC:",message);
            });
            
        } , function(error) {
            console.log("STOMP protocol error " + error);
        });

浏览器控制台:

Opening Web Socket... stomp.min.js:8
Web Socket Opened... stomp.min.js:8
>>> CONNECT
accept-version:1.1,1.0
heart-beat:10000,10000

<<< CONNECTED
user-name:balbi
heart-beat:0,0
version:1.1

connected to server undefined stomp.min.js:8
User connected: balbi 
>>> SUBSCRIBE
id:sub-0
destination:/topic/greetings

Browser Console

Websocket 上下文配置:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketApplicationContext extends AbstractWebSocketMessageBrokerConfigurer {

@Autowired
private Environment env;

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    if (env.acceptsProfiles("test.tomcat")) {
        registry.addEndpoint("/application")
                .setHandshakeHandler(
                        new DefaultHandshakeHandler(new TomcatRequestUpgradeStrategy()))
                .withSockJS();
    } else {
        registry.addEndpoint("/application").withSockJS();
    }
}

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
    registry.enableSimpleBroker("/queue/", "/topic/");
    registry.setApplicationDestinationPrefixes("/app");
}
}

最佳答案

当连接到您的应用程序时,我成功地从 JavaScript 控制台向主题发送了一条消息,并在网页中收到了一条返回消息。

var socket = new SockJS('/kupo/application');
var stompClient = Stomp.over(socket);
stompClient.send('/topic/greetings',{},"hello");

我收到了:

<<< MESSAGE
subscription:sub-0
content-length:5
message-id:ts3oov6b-1
destination:/topic/greetings
content-length:5

hello 

您的调度任务是否按预期被调用?

为什么在你的主配置中,importing some Configurations and still scanning the configuration package ?不应该是其中之一吗?

关于java - 使用 StompClient 在 Spring WebSocket 上传递消息时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22952316/

相关文章:

java - JDK 的这段摘录是如何编译的?

java - 从查询中获取较旧的时间戳

node.js - 本地网络上的 Websocket 奇怪延迟

node.js - 使用 node.js v0.6.18 安装 socket.io。 ws 在安装过程中失败

python - 如何格式化 websocket 请求?

java - Java中枚举的反序列化

java - Spring MVC 上使用不同字段名称的 JSON 序列化

java - 自定义注释的使用,如何

java - 将 UUID 添加到 neo4j spring 数据框架

java - 事件仅由一个 bean 接收? (尽管有好几个)