{"id":19993242,"url":"https://github.com/dadiyang/java-stomp","last_synced_at":"2026-01-12T08:28:34.498Z","repository":{"id":97514759,"uuid":"168800429","full_name":"dadiyang/java-stomp","owner":"dadiyang","description":"使用 STOMP over SockJS 实现的 SpringBoot 脚手架项目，可用于快速搭建 WebSocket 工程","archived":false,"fork":false,"pushed_at":"2019-02-02T07:23:31.000Z","size":148,"stargazers_count":20,"open_issues_count":0,"forks_count":12,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-11-13T04:56:10.079Z","etag":null,"topics":["java","sockjs","springboot","stomp","websocket"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dadiyang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-02-02T06:04:06.000Z","updated_at":"2023-09-08T09:14:36.000Z","dependencies_parsed_at":"2024-03-15T16:52:20.095Z","dependency_job_id":null,"html_url":"https://github.com/dadiyang/java-stomp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dadiyang%2Fjava-stomp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dadiyang%2Fjava-stomp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dadiyang%2Fjava-stomp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dadiyang%2Fjava-stomp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dadiyang","download_url":"https://codeload.github.com/dadiyang/java-stomp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252334247,"owners_count":21731367,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","sockjs","springboot","stomp","websocket"],"created_at":"2024-11-13T04:52:32.840Z","updated_at":"2026-01-12T08:28:34.492Z","avatar_url":"https://github.com/dadiyang.png","language":"Java","funding_links":[],"categories":["Java"],"sub_categories":[],"readme":"# WebSocket 脚手架项目\n\n使用 **STOMP over SockJS** 实现的 SpringBoot 脚手架项目，可用于**快速搭建 WebSocket 工程**(支持集群)\n\n# 使用\n\n1. 启动项目\n2. 浏览器打开 http://localhost:8025 \n3. 登录 (账号: admin 密码: 123456)\n4. 发送任意的文本内容，服务器将回复相同的内容并加上 Echo 前缀\n\n效果展示: \n\n![效果展示](./img/java-stomp.png)\n\n当收到消息时，服务端会打印当前在线人数：\n\n\u003e 当前本系统总在线人数: 1, 当前用户: admin, 该用户的客户端连接数: 1\n\n# WebSocket 集群\n\nSpring 是支持 **WebSocket 集群**的，但是网上很少有资料介绍，官方文档对于相关的配置说明也比较模糊\n\n为此，作者查了许多资料和源码，具体配置可以查看 [WebSocketConfig类](./src/main/java/com/github/dadiyang/javastomp/config/WebSocketConfig.java)，里面有非常详细的注释说明\n\nWebSocket 集群必须依赖**全功能的消息Broker**(full-featured message broker)，推荐使用 RabbitMQ\n\n## 安装 RabbitMQ\n\n具体查看 [RabbitMQ安装和集群搭建教程](./RabbitMQ安装和集群搭建教程.md)\n\n## 配置项\n\n```yaml\nwebsocket:\n  broker:\n     use-simple-broker: false\n     username: test\n     password: Passw0rd\n     virtualHost: \"/stomp\"\n#    地址可配置一个或多个，当其中一个不可用时，会自动切换以保证高可用\n     addresses:\n      - 127.0.0.1:61613\n```\n\n# Nginx 配置\n\nWebSocket 在连接的时候需要做一次连接升级，而 Nginx 默认是不支持连接升级的，因此如果需要使用 Nginx 做负载均衡的话，要添加以下配置\n\n```text\nlocation /ws{\n   proxy_http_version 1.1;\n   proxy_set_header Upgrade $http_upgrade;\n   proxy_set_header Connection \"upgrade\";\n   # 指定域名\n   proxy_pass   域名;\n   proxy_redirect off;\n}\n```\n\n当然，如果不添加此配置，SockJS 会为我们自动降级，也能保证可用，但是性能会降低。\n\n# 参考\n* [Websocket Stomp Handle Broker Relay](https://docs.spring.io/spring/docs/5.1.2.RELEASE/spring-framework-reference/web.html#websocket-stomp-handle-broker-relay)\n* [STOMP Protocol Specification](http://stomp.github.io/stomp-specification-1.1.html#Abstract)\n* [STOMP Over WebSocket](http://jmesnil.net/stomp-websocket/doc/)\n* [CentOS6和CentOS7环境下RabbitMQ安装配置和非ROOT权限启动及集群搭建最完整教程](https://blog.csdn.net/dadiyang/article/details/85774577)\n* [CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集群服务与使用](https://segmentfault.com/a/1190000010702020)\n* [Using RabbitMQ stomp adapter to relay message across subscriptions in different servers](https://stackoverflow.com/questions/41904819/using-rabbitmq-stomp-adapter-to-relay-message-across-subscriptions-in-different/53468085#53468085)\n* [What is MultiServerUserRegistry in spring websocket?\n](https://stackoverflow.com/questions/43251025/what-is-multiserveruserregistry-in-spring-websocket/53631535#53631535)\n* [Spring Websockets Broker relay supporting a cluster of STOMP endpoint addresses](https://github.com/spring-projects/spring-framework/issues/17057)\n* [spring-framework#diff-11144739384955df1f8f38cbcde8d95b](https://github.com/spring-projects/spring-framework/commit/ffbc75ae47936c8668c55332e5b70142279f64ac#diff-11144739384955df1f8f38cbcde8d95b)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdadiyang%2Fjava-stomp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdadiyang%2Fjava-stomp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdadiyang%2Fjava-stomp/lists"}