需要实现前端页面->zuul网关->消息服务,建立websocket连接

使用spring-cloud-netflix-zuul-websocket 实现zuul网关层对websocket的转发;

注意事项:

1.前端使用sockjs,注意地址前缀

// 不要使用ws前缀!!,如果使用websocket(url),为ws前缀

var socket = new SockJS('http://datamgt-services.respool.wmcloud-qa.com/notify-websocket')

注:如果使用ws前缀会报如下异常:

sockjs.min.js:27 Failed to load ws://xx/info: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

2.后端注意开启跨域和指定sockjs协议:

@Override

public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {

//注册一个名字为"notify-websocket" 的endpoint,并指定 SockJS协议。 点对点-用

stompEndpointRegistry

.addEndpoint("/notify-websocket")

.setAllowedOrigins("*")

.withSockJS();

}

3.zuul层配置:

zuul:

routes:

service-notify:

path: /service-notify/**

service-id: service-notify

url: http://xxxx

customSensitiveHeaders: true

ws:

brokerages:

service-notify:

end-points: /notify-websocket

brokers: /topic

destination-prefixes: /send

注意:

前端访问时不要再加服务名称:

正确: new SockJS('http://zuul地址/notify-websocket')

错误: new SockJS('http://zuul地址/服务名称/notify-websocket') 会报404

配置文件必须指定zuul.routes.服务名称.url,否则报错

如果要动态指定服务的实际url怎么办,重写获取url的方法

/**

* 重写获取服务url的方法:原有方法读取配置的路由url,改为通过服务读取

* @param zuulProperties

* @return

*/

@Bean

public ZuulPropertiesResolver zuulPropertiesResolver(

final ZuulProperties zuulProperties) {

return new ZuulPropertiesResolver() {

@Override

public String getRouteHost(ZuulWebSocketProperties.WsBrokerage wsBrokerage) {

// 默认方法去读配置文件url属性

//return zuulProperties.getRoutes().get(wsBrokerage.getId()).getUrl();

//自己改写,可以通过注册中心读取服务地址、或者数据库等方式

return "http://xxx";

}

};

}

参考:

ws配置 zuul_zuul+websocket+sockjs相关推荐

  1. WebSocket+SockJs+STMOP

    应用场景 WebSocket 1 编写Handler类 2 拦截器的实现 3 WebSocketConfig配置 4 客户端配置 5 Bad Code 6 nginx配置 SockJs 1 WebSo ...

  2. 基于spring websocket+sockjs实现的长连接请求

    1.前言 页面端通常有需求想要准实时知道后台数据的一个变化情况,比如扫码登录场景,或者跳转到网银支付场景,在旧有的短轮训实现下,通常造成大量的不必要请求和查询,这里基于spring websocket ...

  3. 用nginx反向代理功能将WS转为加密websocket (wss)

    原来写的服务器端程序支持websocket非加密协议,即仅支持 ws://ip/file 形式的访问,现在网站的主协议变成了https了,再通过ws://协议来访问原服务器,浏览器阻止了.查找原因就是 ...

  4. JSON.stringify( new WebSocket(ws://localhost:8080/websocket.do))

    //存在session//先是 test 后是 wsvar test = {test: '', test1: 1,fun:function () {console.info("函数可以吗&q ...

  5. 若依(ruoyi/ruoyi-vue)集成websocket以及ws配置匿名访问

    文章目录 若依集成websocket实现实时通信 1.`ruoyi-framework/pom.xml`文件添加`websocket`依赖. 2.配置匿名访问 - shiro安全框架 - spring ...

  6. Sping WebSocket SockJS使用

    2019独角兽企业重金招聘Python工程师标准>>> 注意点: 1.Spring Framework从4.0版本开始支持websocket,示例代码使用的是4.1.3 2.Sock ...

  7. apache 配置 wss websocket打开握手超时_「Web应用架构」WebSocket介绍和WebSocket API

    WebSocket支持在客户端和服务器之间双向的.面向消息的文本和二进制数据流.它是浏览器中最接近原始网络套接字的API.除了WebSocket连接也不仅仅是一个网络套接字,因为浏览器在一个简单的AP ...

  8. springboot+websocket+sockjs进行消息推送【基于STOMP协议】

    1.浅谈WebSocket WebSocket是在HTML5基础上单个TCP连接上进行全双工通讯的协议,只要浏览器和服务器进行一次握手,就可以建立一条快速通道,两者就可以实现数据互传了.说白了,就是打 ...

  9. ws配置 zuul_SpringCloud系列研究---服务网关zuul

    一.zuul简介 服务网关是微服务架构中的入口,微服务平台通过服务网关统一向外部暴露API供客户端调用,网关除了具备服务路由.均衡负载功能之外,它还具备了权限控制等功能.在Spring Cloud中的 ...

最新文章

  1. 计算机网络应用PS,计算机一级Photoshop应用试题及答案
  2. java网格画线_java 网格输出的类--练习 stream
  3. ubuntu中以root权限打开文件(夹)
  4. 声明式事务控制的实现
  5. MacosX 下GCC编译指定版本的代码
  6. php在线考试系统模板下载,PHPEMS在线模拟考试系统 v6.1
  7. 法语写信_为我们写信:我们最热门的19个主题
  8. 使用Libxml2解析xml[转]
  9. python常用的库与包_python常用到哪些库?
  10. java 日志时间格式_java.util.logging.Logger 使用中关于时间格式的问题
  11. 下列统计量服从什么分布_第六章 数理统计基本概念
  12. 【CAD】机械类制图实用功能总结
  13. 什么是BSIC及其在GSM系统中的应用
  14. 微信公众平台之模拟登录
  15. 智能健身动作识别:PP-TinyPose打造AI虚拟健身教练!
  16. 【C++代码】约瑟夫环问题:0,1,……,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。
  17. 浅谈RabbitMQ的基石—高级消息队列协议(AMQP)
  18. java.sql.SQLException: The server time zone value '???ú±ê×??±??' is unrecognized or represents 解决方法
  19. 7.3 Python 一维数据的格式化和处理
  20. 实现商品分类和品牌管理功能

热门文章

  1. python __builtin__,一处设置, 全局引用
  2. 小米智能音箱能否成下一个小米手机?
  3. Burp 扩展武器库
  4. PerfView专题 (第十篇):洞察 C# 终结队列引发的内存泄漏
  5. vue前端如何获取django后端数据
  6. 2020ICPC上海站复盘及近期打算
  7. [机器学习算法]机泊松回归算法原理详解和应用
  8. Excel如何为sheet设置超链接目录
  9. 华尔街顶级基金更青睐团队投资,高质量人才成为最大资本
  10. 居家办公竟比去公司上班还累?