spring boot构建Stomp客户端

简介: 配置包括三部分,一个是基本的websocket客户端配置,另一个是Stomp客户端配置和会话处理

一、依赖

依赖只有一个,版本跟随spring boot版本就行。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>

二、客户端配置

配置包括三部分,一个是基本的websocket客户端配置,另一个是Stomp客户端配置和会话处理。

先看基本的websocket客户端配置:

    @Bean
    public WebSocketClient webSocketClient() {
        List<Transport> transports = new ArrayList<>();
        transports.add(new WebSocketTransport(new StandardWebSocketClient()));
        transports.add(new RestTemplateXhrTransport());
        return new SockJsClient(transports);
    }

然后是Stomp客户端配置:

  @Bean
    public WebSocketStompClient webSocketStompClient(WebSocketClient webSocketClient, StompSessionHandler stompSessionHandler) {
        WebSocketStompClient webSocketStompClient = new WebSocketStompClient(webSocketClient);
        webSocketStompClient.setMessageConverter(new StringMessageConverter());
        webSocketStompClient.connect("http://localhost:6060/pda-message-websocket", stompSessionHandler);
        return webSocketStompClient;
    }

会话处理配置:

    @Bean
    public StompSessionHandler stompSessionHandler() {
        return new ClientStompSessionHandler();
    }

三、会话处理程序 ClientStompSessionHandler

这个类继承了 StompSessionHandlerAdapter,包括下面的抽象方法:

    public StompSessionHandlerAdapter() {
    }

    public Type getPayloadType(StompHeaders headers) {
        return String.class;
    }

    public void handleFrame(StompHeaders headers, @Nullable Object payload) {
    }

    public void afterConnected(StompSession session, StompHeaders connectedHeaders) {
    }

    public void handleException(StompSession session, @Nullable StompCommand command, StompHeaders headers, byte[] payload, Throwable exception) {
    }

    public void handleTransportError(StompSession session, Throwable exception) {
    }

我们的ClientStompSessionHandler类中,主要实现:afterConnected,handleFrame,handleException,handleTransportError。

首先来看 afterConnected方法,这个方法的调用在客户端连接完成之后:

    @Override
    public void afterConnected(StompSession session, StompHeaders connectedHeaders) {
         //这里需要自己写逻辑,这里只是简单的演示
        logger.info("客户端已连接: headers {}", connectedHeaders);
        session.subscribe("/topic/greeting", this);
        String message = "hello";
        logger.info("客户端发送:{}", message);
        session.send("/app/greeting", message);
    }

对帧的处理:

  @Override
    public void handleFrame(StompHeaders headers, Object payload) {
        //这里需要自己写逻辑,这里只是简单的演示
        logger.info("客户端收到消息:{}",payload);
    }

客户端异常处理:

    @Override
    public void handleException(StompSession session, StompCommand command, StompHeaders headers, byte[] payload, Throwable exception) {
      //这里需要自己写逻辑,这里只是简单的演示
        logger.error("客户端错误: 异常 {}, command {}, payload {}, headers {}", exception.getMessage(), command, payload, headers);
    }

传输异常处理:

   @Override
    public void handleTransportError(StompSession session, Throwable exception) {
      //这里需要自己写逻辑,这里只是简单的演示
        logger.error("客户端传输错误:错误 {}", exception.getMessage());
    }

四、启动

   public static void main(String[] args) {
        new SpringApplicationBuilder(ClientWebSocketSockJsStompApplication.class)
                .web(WebApplicationType.NONE)
                .run(args);
    }

结果如下:
1690177973797.jpg

目录
相关文章
|
1月前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
1574 55
|
3月前
|
JSON 人工智能 Java
基于Spring AI构建智能Text-to-SQL转换器:一个完整的MCP
Spring AI 更新结构化输出转换器,弃用旧版 Parser 类,引入与 Spring 框架对齐的 Converter 体系,提升命名规范与功能兼容性。新版本支持 JSON、XML 及 Java 对象转换,确保 LLM 输出结构化,便于下游应用处理。
|
3月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
679 3
|
2月前
|
人工智能 Java API
构建基于Java的AI智能体:使用LangChain4j与Spring AI实现RAG应用
当大模型需要处理私有、实时的数据时,检索增强生成(RAG)技术成为了核心解决方案。本文深入探讨如何在Java生态中构建具备RAG能力的AI智能体。我们将介绍新兴的Spring AI项目与成熟的LangChain4j框架,详细演示如何从零开始构建一个能够查询私有知识库的智能问答系统。内容涵盖文档加载与分块、向量数据库集成、语义检索以及与大模型的最终合成,并提供完整的代码实现,为Java开发者开启构建复杂AI智能体的大门。
1397 58
|
1月前
|
缓存 监控 Java
《深入理解Spring》性能监控与优化——构建高性能应用的艺术
本文系统介绍了Spring生态下的性能监控与优化实践,涵盖监控体系构建、数据库调优、缓存策略、线程池配置及性能测试等内容,强调通过数据驱动、分层优化和持续迭代提升应用性能。
|
1月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
2月前
|
XML Java 测试技术
使用 Spring 的 @Import 和 @ImportResource 注解构建模块化应用程序
本文介绍了Spring框架中的两个重要注解`@Import`和`@ImportResource`,它们在模块化开发中起着关键作用。文章详细分析了这两个注解的功能、使用场景及最佳实践,帮助开发者构建更清晰、可维护和可扩展的Java应用程序。
217 0
|
消息中间件 存储 Java
📨 Spring Boot 3 整合 MQ 构建聊天消息存储系统
本文详细介绍了如何使用Spring Boot 3结合RabbitMQ构建高效可靠的聊天消息存储系统。通过引入消息队列,实现了聊天功能与消息存储的解耦,解决了高并发场景下直接写入数据库带来的性能瓶颈问题。文章首先分析了不同MQ产品的特点及适用场景,最终选择RabbitMQ作为解决方案,因其成熟稳定、灵活路由和易于集成等优势。接着,通过Docker快速部署RabbitMQ,并完成Spring Boot项目的配置与代码实现,包括生产者发送消息、消费者接收并处理消息等功能。最后,通过异步存储机制,既保证了消息的即时性,又实现了可靠持久化。
588 0
📨 Spring Boot 3 整合 MQ 构建聊天消息存储系统