广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Spring Cloud微服务使用webSocket的方法
  • 878
分享到

Spring Cloud微服务使用webSocket的方法

2024-04-02 19:04:59 878人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

websocket WEBSocket长连接是一种在单个tcp连接上进行全双工通信的协议,允许双向数据推送。一般微服务提供的restful api只是对前端请求做出相应。使用web

websocket

WEBSocket长连接是一种在单个tcp连接上进行全双工通信的协议,允许双向数据推送。一般微服务提供的restful api只是对前端请求做出相应。使用webSocket可以实现后端主动向前端推送消息。

网关配置

spring cloud 的网关组件有zuul和getway

getway


base:
  config:
    Nacos:
      nacoshost: localhost
      port: 8848

spring:
  application:
    name: gateway
  main:
    allow-bean-definition-overriding: true
  cloud:
    nacos:
      discovery:
        server-addr: ${base.config.nacos.nacoshost}:${base.config.nacos.port}
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        #  websocket
        - id: CLOUD-WEBSOCKET
          uri: lb:ws://cloud-websocket
          predicates:
            - Path=/cloud-websocket
public class WebSocketHandler extends AbstractWebSocketHandler {
    
    private static Map<String, WebSocketSession> sessionMap = new ConcurrentHashMap<>();
    private static Map<String, String> userMap = new ConcurrentHashMap<>();

    
    @Override
    public void afterConnectionEstablished(WebSocketSession session) {
        // 获取参数
        String user = String.valueOf(session.getAttributes().get("user"));
        userMap.put(user, session.getId());
        sessionMap.put(session.getId(), session);
    }

    
    @Override
    public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
        JSONObject jsonObject = JSONObject.parseObject(message.getPayload().toString());
        String content = jsonObject.getString("content");
        String targetAdminId = jsonObject.getString("targetId");
        if("0".equals(targetAdminId)){
            //  推送给所有人
            userMap.forEach((key,value)->{
                try {
                    this.sendMessage(key,content);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            });
        }else{
            sendMessage("1", content);
        }
    }

    
    @Override
    public void handleTransportError(WebSocketSession session, Throwable exception) {
        sessionMap.remove(session.getId());
    }

    
    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
        sessionMap.remove(session.getId());
    }

    @Override
    public boolean supportsPartialMessages() {
        return false;
    }

    
    public void sendMessage(String user, String message) throws IOException {
        String sessionId = userMap.get(user);
        if (StringUtils.isEmpty(sessionId)) {
            return;
        }
        WebSocketSession session = sessionMap.get(sessionId);
        if (session == null) {
            return;
        }
        session.sendMessage(new TextMessage(message));
    }
}

添加拦截器


package com.auexpress.cloud.interceptor;

import org.springframework.Http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.HandshakeInterceptor;

import java.util.Map;


public class WebSocketInterceptor implements HandshakeInterceptor {
    
    @Override
    public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) {
        if (request instanceof ServletServerHttpRequest) {
            ServletServerHttpRequest serverHttpRequest = (ServletServerHttpRequest) request;
            // 获取请求路径携带的参数
            String user = serverHttpRequest.getServletRequest().getParameter("user");
            attributes.put("user", user);
            return true;
        } else {
            return false;
        }
    }

    @Override
    public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {

    }
}

到此这篇关于Spring Cloud微服务使用webSocket的方法的文章就介绍到这了,更多相关Spring Cloud使用webSocket内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Spring Cloud微服务使用webSocket的方法

本文链接: https://www.lsjlt.com/news/129192.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spring Cloud微服务使用webSocket的方法
    webSocket webSocket长连接是一种在单个tcp连接上进行全双工通信的协议,允许双向数据推送。一般微服务提供的restful API只是对前端请求做出相应。使用web...
    99+
    2022-11-12
  • 使用kotlin编写spring cloud微服务的过程
    创建工程 使用idea的spring initializr创建一个项目,语言选择kotlin, 类型为gradle。 根据需要选择依赖 配置文件 yml或者properties文...
    99+
    2022-11-12
  • 如何使用Spring Cloud构建微服务架构?
    微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需要微服务框架的支持。在 Java 生态圈,目前使用较多的微服务框架就是集成了包括 Netflix O...
    99+
    2023-06-05
  • 微服务间调用Retrofit在Spring Cloud Alibaba中的使用
    目录前置知识搭建使用集成与配置服务间调用服务限流熔断降级总结前置知识 在微服务项目中,如果我们想实现服务间调用,一般会选择Feign。之前介绍过一款HTTP客户端工具Retrofi...
    99+
    2022-11-13
  • Spring Cloud中声明式服务调用Feign的方法
    这篇文章主要介绍“Spring Cloud中声明式服务调用Feign的方法”,在日常操作中,相信很多人在Spring Cloud中声明式服务调用Feign的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”S...
    99+
    2023-06-19
  • Spring Cloud-Feign服务调用的问题及处理方法
    概述: • Feign 是一个声明式的 REST 客户端,它用了基于接口的注解方式,很方便实现客户端配置。 • Feign 最初由 Netflix 公司提供...
    99+
    2022-11-12
  • 基于Spring Cloud的微服务架构演变史
    导读一段时期以来 “微服务架构 ”一直是一个热门词汇,各种技术类公众号或架构分享会议上,关于微服务架构的讨论和主题也都非常多。对于大部分初创互联网公司来说,早期的单体应用结构才是最合适的选择,只有当业务进入快速发展期,在系统压力、业务复杂度...
    99+
    2023-06-05
  • Spring Cloud Feign使用对象参数的方法
    本文小编为大家详细介绍“Spring Cloud Feign使用对象参数的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring Cloud Feign使用对象参数的方法”文章能帮助大家解决...
    99+
    2023-06-29
  • Spring Cloud OpenFeign实例介绍使用方法
    目录一. OpenFeign概述二. 使用步骤2.1 feign接口模块2.1.1依赖配置2.1.2编写FeignClient的接口, 并加@FeignCleint 注解2.2 消费...
    99+
    2022-11-13
  • Spring Cloud Config服务端配置的方法是什么
    这篇文章主要讲解了“Spring Cloud Config服务端配置的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Cloud Config服务端配置的方法是什么”吧...
    99+
    2023-06-19
  • 如何理解Spring Cloud和Docker的微服务架构
    如何理解Spring Cloud和Docker的微服务架构,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。  Spring Cloud和Docker的微服务架构  功能服务 ...
    99+
    2023-06-04
  • Spring Cloud Alibaba全家桶(四)——微服务调用组件Feign
    前言 本文小新为大家带来 微服务调用组件Feign 的相关知识,具体内容包含什么是Feign,Spring Cloud Alibaba快速整合OpenFeign,Spring Cloud Feign的自定义配置及使用(包括:日志配置、契约...
    99+
    2023-08-17
    微服务 spring spring cloud
  • Spring Cloud Alibaba全家桶(六)——微服务组件Sentinel介绍与使用
    前言 本文小新为大家带来 微服务组件Sentinel介绍与使用 相关知识,具体内容包括分布式系统存在的问题,分布式系统问题的解决方案,Sentinel介绍,Sentinel快速开始(包括:API实现...
    99+
    2023-09-02
    微服务 sentinel java spring cloud
  • Java Spring Cloud客户服务创建方法是什么
    这篇文章主要讲解了“Java Spring Cloud客户服务创建方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java Spring Cloud客户服务创建方法是什么”吧!新建一...
    99+
    2023-06-05
  • Spring Cloud 专题之Sleuth 服务跟踪实现方法
    目录准备工作实现跟踪抽样收集整合Zipkin1.下载Zipkin2.引入依赖配置3.测试与分析持久化到mysql1.创建zipkin数据库2.启动zipkin3.测试与分析在一个微服...
    99+
    2022-11-12
  • Spring Cloud Alibaba整合Nacos使用的方法是什么
    今天小编给大家分享一下Spring Cloud Alibaba整合Nacos使用的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有...
    99+
    2023-07-05
  • 【Spring Cloud Alibaba】(二)微服务调用组件Feign原理+实战
    系列目录 【Spring Cloud Alibaba】(一)微服务介绍 及 Nacos注册中心实战 本文目录 系列目录前言什么是RPC?Feign和OpenFeign都是什么?HTTP调用...
    99+
    2023-10-18
    微服务 spring cloud java spring 云原生
  • 怎么解析Spring Cloud 微服务系统中分布式事务解决方案
    本篇文章为大家展示了怎么解析Spring Cloud 微服务系统中分布式事务解决方案,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、微服务系统最大的挑战数据的并发访问、修改不同请求之间的数据隔离多...
    99+
    2023-06-04
  • Spring Cloud中使用Feign,@RequestBody无法继承的解决方案
    目录使用Feign,@RequestBody无法继承的问题原因分析解决方案使用feign遇到的问题1、示例2、首次访问超时问题3、FeignClient接口中使用Feign,@Req...
    99+
    2022-11-12
  • 教你Spring Cloud保证各个微服务之间调用安全性
    导读:在微服务的架构下,系统会根据业务拆分为多个服务,各自负责单一的职责,在这样的架构下,我们需要确保各api的安全性,也就是说服务不是开放的,而是需要授权才可访问的,避免接口被不合...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作