• Stars
    star
    128
  • Rank 281,044 (Top 6 %)
  • Language
    Java
  • Created over 5 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

SpringBoot + Netty开发WebSocket服务器,时时获取火币(huobi)交易所推送过来的交易对最新数据。

有关该项目中的代码部分简单解释,可以查看博客。

1、Netty+WebSocket 获取火币交易所时时数据项目

简介

本项目使用SpringBoot+Netty来开发WebSocket服务器,与火币交易所Websocket建立连接,时时获取火币网交易所推送过来的交易对最新数据。

项目本身也是我在之前公司为了获取各大交易所数据所开发的项目,现在只是重新整理了下代码,现在它更像一个脚手架项目,可以在此基础上很方便的添加其它交易所。

一、项目概述

1、技术架构

SpringBoot2.1.5 + Netty4.1.25 + Maven3.5.4 + lombok(插件)

2、项目整体结构

spring-boot-netty-websocket-huobi # 项目名称
|
---src
      |
      ---com.jincou.exchange.client
                                  |# 连接交易所websocket的公共类
                                  ---common
                                  |# 枚举类
                                  ---enums
                                  |# 获取火币网交易所数据具体实现类
                                  ---huobi
                                  |# 定时任务
                                  ---scheduler    
                                  |# 工具类
                                  ---util
      ---resources                
           | # 配置类
            ---application.yml

说明

从这个项目的架构来看,当你需要添加获取一个新的交易所数据的时候,也很方便,因为这里已经把公共部分抽离出来了。

3、项目测试

直接启动Springboot启动类Application.java,就可以获取火币网推送过来交易对的数据了。

如图

二、需要注意的点

1、服务器问题

一般交易所的服务器都在国外,所以我们本地是无法建立Websocket连接的,除非本地翻墙。

同样项目也不能部署到阿里云等国内服务器,你只能选择香港或者国外服务器部署项目。

这里是火币网专门为我们提供的国内测试地址,所以本地可以获取数据。

2、获取交易所最新交易对数据问题

我们在向交易所Websocket订阅交易对的时候,首先就是要知道该交易所有哪些交易对,这份数据是需要我们单独去获取的,而且不是一次获取就好了。

因为该交易所可能新增或者删除交易对。所以需要我们通过定时任务去获取更新最新的交易对数据。

我这边只是模拟了一个交易对btcusdt,并没有提供获取最新交易对数据的服务。

3、数据存储问题

这也是最值得思考的一个问题,数据我们是获取了,但如果保存!

正常合理的开发应该获取数据是一个微服务,处理获取的数据是一个微服务。那么只需要获取数据后去调处理数据微服务就可以保存数据了。

但在这里,如果只是这样是行不通的。

因为火币网向我们推送的消息的速度会比我们调其它服务保存的数据要快,这就会存在数据丢失的情况发生

这里仅仅是输出一个btcusdt交易对,并且只是订阅一个k线主题,而实际上交易所会有上百个交易对和几种订阅主题,

这样的消息推送速度是上面的几百倍。所以你会发现如果你不做任何改动,对于一些大的交易所而言,你的数据是来不及存储的。


补充

这边之前也写过有关 Netty 和 Websocket 相关的博客文章,可以做个参考

1、Netty专题(共9篇)

2、Websocket专题(共5篇)

acda64387e0896604b5932dc433c8b77

More Repositories

1

spring-boot-sharding-sphere

SpringBoot + ShardingSphere 实现读写分离 分库分表
Java
362
star
2

spring-boot-distributed-redisson

redis实现分布式锁 Spring Boot core for Redisson RedissonLock
Java
246
star
3

mall-manage-system

vue-cli 3.0 + element-ui + vue-router + axios + Vuex + Mock + echarts 实现电商管理系统后台
Vue
128
star
4

spring-cloud-rocketmq-transaction

SpringCloud + RocketMQ 实现分布式事务(transaction)
Java
109
star
5

spring-boot-wechat-login

Springboot 实现微信扫码授权登陆,获取用户基本信息
Java
77
star
6

spring-boot-websocket-study

SpringBoot+Websocket 实现 1、公告功能 2、单人聊天功能 3、比特币时时推送功能 4、群聊功能,时时在线用户信息
Java
71
star
7

springboot-redis-caffeine-cache

Caffeine + Redis实现二级缓存框架。支持动态配置是否开启一级缓存、二级缓存。支持多个节点部署,多节点之间一级缓存通过redis订阅/发布功能来通知其他节点进行清理缓存的操作。
Java
70
star
8

spring-boot-mybatis-interceptor

mybatis自定义主键插件,通过该插件生成分布式唯一雪花ID作为数据库表的主键。
Java
53
star
9

spring-boot-study

springboot学习项目
Java
50
star
10

spring-boot-wechat-pay

SpringBoot 实现微信扫码支付功能
Java
27
star
11

spring-boot-redis-ip-limiter

Springboot + Redis 组件,实现一个分布式接口IP访问限流功能
Java
20
star
12

spring-boot-redis-lua

SpringBoot + Redis布隆过滤器。主要实现以下功能 : 1、几种常用方式判断当前key是否存在的性能进行比较。2、通过Lua脚本批量插入数据到redis布隆过滤器,并校验该数据在布隆过滤器中
Java
19
star
13

spring-boot-operate-log

基于SpringBoot+注解的方式获取操作日志,对业务代码无侵入。注解支持SPEL表达式、函数、三目运算
Java
16
star
14

spring-cloud-study

SpringCloud 注册发现、Feign服务调用、Hystrix实战、Zuul项目搭建、mysql实现配置中心
Java
16
star
15

spring-boot-many-data-source

Springboot + Druid 实现多数源
Java
12
star
16

spring-cloud-alibaba-study

学习spring-cloud-alibaba一些组件,包括GateWay、 Feign、 Nacos、 Zipkin、 Sentinel
Java
11
star
17

BDY-reptile

OkHttp爬取接口,通过获取接口返回数据,循环调用接口获取所有数据
Java
9
star
18

spring-boot-exception-notice

springBoot 集成钉钉机器人、企业微信、邮箱 实现异常通知。配置简单,开箱即用,同时异常信息也非常详细,帮助开发者快速定位问题
Java
9
star
19

spring-boot-security-study

Springboot +Security 实现密码,短信验证码登陆。OAuth2功能还在学习中......
Java
7
star
20

mybatis-desensitization-plugin

基于mybatis插件方式对一些敏感字段进行脱敏。目前支持姓名、手机号、座机号码、银行卡、身份证号、邮箱、地址等进行脱敏。也可以自定义字段脱敏。配置规则灵活,易扩展。
Java
6
star
21

SpringbootAcitveMQ

springboot整合ActiveMQ
Java
3
star