
Java
文章平均质量分 64
宝华的小岛
生命不息,奔跑不止。
展开
-
搭建Docker+SRS服务器实现推流拉流的效果
最初的一个想法,是针对当前的网络电视去的,很多网络电视买回家,还要充很多会员,甚至跌入连环坑。我想给妈妈买一台电视,想把我自己收集的电影电视剧做成一个影视库,通过搭建家庭影院服务器,然后在安卓终端上面点播。最初想得很简单,就是做一个文件服务器就可以了,但是安卓支持的解码器有限,就想着在服务器把各种格式的电影转换成流媒体,推向流媒体服务器。没办法,只好使用绝对路径。之前写过一个手机直播的模型,使用的rtmp服务器是nginx,这次我使用的是用Docker搭建的SRS服务器。就这样,一个SRS服务器就建好了。原创 2022-12-01 14:02:22 · 4506 阅读 · 3 评论 -
Springboot Security 前后端分离模式自由接口最小工作模型
但凡讲解Springboot Security的教程,都是根据其本身的定义,前后端整合在一起,登录采用form或者basic。我们需要纯粹使用自己的自由接口来实现注册登录,以及其他业务接口访问的身份验证和授权。这里的设计是用户身份验证与授权的模块跟业务模块的身份权限验证是分开的。过滤器设置的白名单跟此处配置的完全授权的白名单没有必然的关系。给定的权限是ROLE_USER,前面的ROLE_前缀是必须要加的,这是jsr250的权限校验规范要求的。两个接口文件,一个设计为UAA模块,一个设计为业务模块。原创 2022-11-24 14:05:49 · 671 阅读 · 0 评论 -
Springboot Websocket一般封装方法
此方法不是唯一,只是自己对于Springboot中关于Websocket处理思路比较清晰的一种,在此记录下来。总共不过就四个文件而已。原创 2022-11-23 15:10:14 · 1819 阅读 · 0 评论 -
Java整合Flink初学系列
本次研究学习浅尝则止,由浅入深。记录下来,以作参考。Java整合Flink批处理本地数据Java整合Flink流式处理本地数据Java整合Flink流式处理从Socket获取的数据Java整合Flink流式处理从Kafka获取的数据Java整合Flink将结果写入ElasticSearchJava整合Flink使用结巴中文分词器附:CentOS7架设Flink1.13.0服务器...原创 2021-05-23 12:10:01 · 619 阅读 · 0 评论 -
Java整合Flink使用结巴中文分词器
这是本次学习的最后一篇了,我在完成基本业务处理模型的基础之上https://blog.youkuaiyun.com/xxkalychen/article/details/117190236?spm=1001.2014.3001.5501,增加一个中文分词的功能。一、添加pom依赖。<dependency> <groupId>com.huaban</groupId> <artifactId>jieba-analysis</artifactId原创 2021-05-23 12:05:24 · 662 阅读 · 2 评论 -
Java整合Flink将结果写入ElasticSearch
上次修改https://blog.youkuaiyun.com/xxkalychen/article/details/117152948?spm=1001.2014.3001.5501把数据源确定为消息中间件kafka,从数据源来讲已经比较符合标准模型了。数据处理的最终结果也不能只是控制台打印,终究还是要持久化的。我们可以写入HBase,可以写入HDFS,我这里还是选择写入ElasticSearch。首先我们要启动ElasticSearch服务器,zookeeper和kafka。一、添加ElasticSearc原创 2021-05-23 11:31:08 · 912 阅读 · 1 评论 -
Java整合Spark第一个程序WordCount
创建一个maven工程。一、添加pom依赖。<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.12</artifactId> <version>3.1.1</version></dependency>我搭建的服务器安装的scala版本是2.12.10,spark版本是3.1.1原创 2021-05-23 03:21:21 · 672 阅读 · 0 评论 -
Java整合Flink流式处理从Socket获取的数据
尝试把Flink的小例子部署到集群去执行,发现找不到本地的txt文件。可是看jar包里面明明被打包进去了,可能获取路径的方法有点问题。懒得去处理,因为流式处理极少去处理本地数据的。我们要把数据来源更换成一个可以源源不断地输入的模式。比如Socket。我们就在前次小例子的基础上来修改https://blog.youkuaiyun.com/xxkalychen/article/details/117148830。修改部分很简单。我们另外创建一个测试类,其他都不用修改。package com.chris.flink原创 2021-05-22 09:39:02 · 2359 阅读 · 0 评论 -
Java整合Flink流式处理本地数据
流式处理用于处理源源不断的数据,服务处理等待状态,有一批新数据进来就处理一批。跟批处理一次性完成一批数据不同。我们在上一次的小例子上做修改https://blog.youkuaiyun.com/xxkalychen/article/details/117147480。其实也没有什么大的修改,我们还是另外创建一个测试类就好,pom什么的都不用修改。package com.chris.flink;import org.apache.flink.api.common.functions.FlatMapFunct原创 2021-05-22 08:59:43 · 965 阅读 · 0 评论 -
Java整合Flink批处理本地数据
Flink是一个流式数据处理框架。我们与Java进行整合的第一个例程基于简单的原则,从本地一次性获取需要的数据,一次性处理完成。这个例程在本地运行,不需要服务器的支撑。创建一个maven工程。一、pom依赖。<properties> <flink.version>1.13.0</flink.version></properties><dependencies> <dependency>原创 2021-05-22 08:01:20 · 914 阅读 · 1 评论 -
Redis学习笔记
Redis学习笔记(1)安装与启动Redis学习笔记(2)在Springboot项目中的配置Redis学习笔记(3)hash的读写Redis学习笔记(4)对list列表的读写Redis学习笔记(5)对set集合的读写Redis学习笔记(6)消息的订阅与发布...原创 2021-05-22 00:17:30 · 115 阅读 · 0 评论 -
Netty初学渐进系列
学习Netty过程中,谢了一些例程和笔记,在这里归纳一个目录,方便查阅。一、Netty应用(一)基本模型二、Netty应用(二)传输Protobuf数据类型三、Netty应用(三)粘包与拆包四、Netty应用(四)实时通信的简单实现五、Netty应用(五)架设WebSocket服务六、Netty应用(六)Websocket连接时携带用户名附:Protobuf初次使用小记...原创 2021-05-22 00:12:44 · 130 阅读 · 0 评论 -
Java整合Storm初学渐进系列
最近学习研究Storm,写了几篇笔记,在这里整理一个目录,方便查阅。一、CentOS7架设Storm单实例服务二、Java整合Storm的简单例子三、Java整合Storm写入ElasticSearch四、Java整合Storm任务分流五、Java整合Storm上传到远程服务器执行六、Java整合Storm使用代码提交远程集群执行七、Java整合Storm读取Kafka数据八、Java整合Storm实现WordCount单词统计九、Java整合Storm使用中文分词十原创 2021-05-22 00:04:54 · 123 阅读 · 0 评论 -
Java整合Storm使用中文分词
以前写的例子,都是基于用空格分割的单词,英文文本本身就是用空格分割,识别相对容易,但是中文之间是没有空格的,严格地说,中文没有可识别的分隔符,能够识别中文词汇来自于中文语法规则,计算机哪里会?所以必须基于一些词库来识别。所以很多大数据处理框架都提供了使用中文分词器的功能。这里我们是用一款叫做结巴分词器的工具,来对输入源的中文进行分词。在上一次修改过的基础之上https://blog.youkuaiyun.com/xxkalychen/article/details/117136261?spm=1001.2014.3原创 2021-05-21 23:55:43 · 369 阅读 · 1 评论 -
Java整合Storm实现WordCount单词统计
如同每一种程序语言的入门都要设计一个输出"Hello,World!"的小例子一样,几乎每一种流式数据处理框架都有一个WordCount的入门例程。MapReduce是一个标准,包括Spark和Flink都提供map和reduce算子,可以很方便地实现单词统计。Storm好像没有发现这个,不过实现起来却也很容易。基于上次修改的程序https://blog.youkuaiyun.com/xxkalychen/article/details/117058030?spm=1001.2014.3001.5501,我们把从Ka原创 2021-05-21 23:20:38 · 434 阅读 · 0 评论 -
面试话题:随机数飘落分布概率
刚刚参加一次面试,跟技术面试官探讨了一个话题。面试官给我出了一个题目,涉及算法。大意是:如果我们要设计一个产品抽奖,每种奖品都有一定概率被抽中,当然也要一定概率什么也抽不中。面试官要考试,对问题的描述半遮半掩,多次对话后我弄清了他的意图,于是稍作思考,给出了两种方案。1. 把未抽中的机会也虚拟为一种产品,将所有产品的概率计算总和,按照100分配实际概率。再给出一个抽奖总次数,生成一个奖品池,比如一个集合,随机抽取后删除该奖品。不过,如果抽奖机会总数很大,这种方案很耗资源。2. 同上,给每一种奖品分配原创 2021-05-21 02:47:40 · 331 阅读 · 1 评论 -
Java整合Storm读取Kafka数据
写到这里,kafka -> storm -> es 应该是流式数据处理最标准的模型了,从消息队列获取流式数据源,经storm多分支流水线逐次清洗、处理、计算,把需要的数据持久化到仓库。根据前几次的不断深入和修改,现在我们就把数据源改成kafka。我们需要做三点改动就好了。一、添加kafka的依赖。<dependency> <groupId>org.apache.kafka</groupId> <artifactId>k原创 2021-05-20 06:48:37 · 929 阅读 · 0 评论 -
Java整合Storm使用代码提交远程集群执行
上次我们通过微小修改https://blog.youkuaiyun.com/xxkalychen/article/details/117045413,实现了本地jar包上传到远程Storm集群执行。Strom还提供直接在本地代码执行提交到远程集群执行的方法。我们还是在上次的小例子上做一点点修改。只需要修改主类MyTopology即可。package com.chris.storm.topology;import com.chris.storm.bolt.CountBolt;import com.chri原创 2021-05-19 22:15:18 · 750 阅读 · 3 评论 -
Java整合Storm上传到远程服务器执行
参考之前的小例子https://blog.youkuaiyun.com/xxkalychen/article/details/117021471?spm=1001.2014.3001.5501,我们稍作修改,实现提交到远程集群执行。一、修改pom.xml1. storm-sore依赖需要添加作用域provided<dependency> <groupId>org.apache.storm</groupId> <artifactId>storm原创 2021-05-19 21:24:15 · 546 阅读 · 2 评论 -
Java整合Storm任务分流
Storm以流水线的模式处理流式数据,每一个环节完成一条逻辑需求中的一个阶段性任务。但是我们的需求不止一个,并不一定处于一条逻辑线,甚至经过几次处理环节之后就没有什么共同点了,这就需要我们将任务处理环节划分开多个分支,每一种需求又会在各自的分支以流水线的模式处理下去。基于上次我们修改过的小例子https://blog.youkuaiyun.com/xxkalychen/article/details/117019970?spm=1001.2014.3001.5501,我们在处理完文字行之后,一方面在后台打印,一方面原创 2021-05-19 11:52:31 · 437 阅读 · 1 评论 -
Java整合Storm写入ElasticSearch
上次写了一个Java整合Storm的一个最简单的例子https://blog.youkuaiyun.com/xxkalychen/article/details/117018310,一个数据源,一个处理中间环节,一个最终环节,一个任务拓扑。我们能看到的效果是控制台打印。根据需要,我们要把数据写入ElasticSearch。我们在原有的项目中做一点小的调整,来实现这个需求。当然,首先我们需要一个ElasticSearch的服务器。我已经开启了自己架设好的ES服务器,版本号7.12.0一、pom中添加Ela原创 2021-05-19 11:14:17 · 405 阅读 · 1 评论 -
Java整合Storm的简单例子
刚刚架设好一台Storm单实例服务器https://blog.youkuaiyun.com/xxkalychen/article/details/117014994,需要写个Java程序来测试一下。使用Idea创建一个Java项目。一、pom依赖<dependency> <groupId>org.apache.storm</groupId> <artifactId>storm-core</artifactId> <v原创 2021-05-19 10:32:48 · 861 阅读 · 0 评论 -
ThreadLocal使用和理解
虽然也使用过几次ThreadLocal来在线程中传递数据,但是大多数是计算http请求耗时,而且多在拦截器中处理,因为存取在一个类中,又没有去研究源码,导致对其的设计理解有偏差。近日看了一些资料和视频,再做了一些研究和尝试,对其认识也渐渐变得清晰起来。由于ThreadLocal跨类使用还是需要有一个公共的静态生成,于是猜测他维护了一个公共的Map来存储线程和变量的绑定,当然这个Map并不是util包下面那个Map,而是另行实现的,各个线程只能操作本线程的数据,没有提供通过key来获取value的途径,所原创 2021-05-02 07:50:51 · 392 阅读 · 0 评论 -
Springcloud与Consul的整合
一、首先创建一个用以提供服务的Springcloud客户端service-user.1. 依赖 implementation 'org.springframework.cloud:spring-cloud-starter-consul-discovery' implementation 'org.springframework.boot:spring-boot-starter-actuator' compileOnly 'org.projectlombok:lombok'原创 2021-04-22 20:04:55 · 485 阅读 · 0 评论 -
Netty应用(六)Websocket连接时携带用户名
接上次Netty实现Websocket协议通信的例子https://blog.youkuaiyun.com/xxkalychen/article/details/115903261?spm=1001.2014.3001.5501整个实例对于客户端的标识都是channel的id或者远程地址,并不直观,我们希望有更加清楚的标识,比如用户名。我们可以制定协议或者上行报文,来识别哪些消息是身份标识,哪些是聊天内容。不过这样我们就要在连接成功之后第一次发送消息时确定。其实我们也可以在连接的时候就带上我们的用户名,就像原创 2021-04-20 17:04:15 · 3533 阅读 · 0 评论 -
Netty应用(五)架设WebSocket服务
Springboot有封装好的Websocket包,只需要几个简单的类和注解就能提供服务。在Java程序中,我们可以使用Netty来实现Websocket服务。依赖:compile 'io.netty:netty-all:4.1.63.Final'同样还是基本的三个文件。1. 自定义处理器package com.chris.ws.server.handler;import io.netty.channel.ChannelHandlerContext;import io.nett原创 2021-04-20 13:27:39 · 598 阅读 · 0 评论 -
Netty应用(四)实时通信的简单实现
本实例实现最基本的CS应用模型,程序启动后通过控制台输入来实现交互。服务器端和客户端使用相同的依赖。compile 'io.netty:netty-all:4.1.63.Final'一、服务器端1. 自定义处理器package com.chris.chat.server.handler;import io.netty.channel.Channel;import io.netty.channel.ChannelHandlerContext;import io.netty.ch原创 2021-04-20 12:53:51 · 907 阅读 · 0 评论 -
Netty应用(三)粘包与拆包
粘包与拆包可能是Netty应用中比较重要的一环。在数据发送端,如果连续发送了一批数据,系统会更具一定规则和条件把这些数据拼接在一起一次性发送。这样对于接收端就失去了数据原来的完整性,所以需要按照协议的规则把拼在一起的数据拆分开来。netty默认提供了几种拆包的策略,有很多资料可以参考。不过我认为最实用的,还是通过网数据头部写入数据长度的方案,它既能准确识别数据,又能节省空间,还能避免像使用分隔符的方式造成分隔符误判(定义好的分隔符在消息中不能包含)。我们创建一个CS模型来测试。为了简洁起见,我们设定原创 2021-04-20 01:19:07 · 262 阅读 · 0 评论 -
Netty应用(二)传输Protobuf数据类型
接上面两篇文章:Netty应用(一)基本模型https://blog.youkuaiyun.com/xxkalychen/article/details/115876196Protobuf初次使用小记https://blog.youkuaiyun.com/xxkalychen/article/details/115875643?spm=1001.2014.3001.5501一、服务器端1. gradle依赖 compile 'io.netty:netty-all:4.1.63.Final' ..原创 2021-04-19 22:57:05 · 291 阅读 · 1 评论 -
Netty应用(一)基本模型
netty是NIO通信框架,七基本使用方式大同小异。一、创建工程,添加依赖compile 'io.netty:netty-all:4.1.63.Final'这个依赖是目前官网上推荐的最高版本。二、创建测试类服务端:package com.chris.netty;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelHandlerContext;import io.netty.cha原创 2021-04-19 22:36:52 · 215 阅读 · 0 评论 -
Protobuf初次使用小记
本来是正在研究学习netty,教程中出现了protobuf,索性仔细研究了一番。厚积薄发,说不定哪一天就突然要用到。protobuf是一种类似于json和xml的数据传输格式,优势在于高效的序列化和反序列化。关于这个,我没有去测试,只是把整个使用过程熟悉了一遍。一、首先是需要安装protobuf我是用的是windows,需要从github下载安装文件https://github.com/protocolbuffers/protobuf/releases需要下载这个文件,这是目前的最新版原创 2021-04-19 22:09:00 · 252 阅读 · 0 评论 -
在Springboot中使用@ControllerAdvice对接口返回数据进行统一包装
使用Springboot设计接口,返回数据大致有三种情况:一是直接返回数据,基本数据和String数据类型会直接返回,其他数据会构建为json返回,系统有内置的转换器在工作;二是放在ResponseEntity中,这个效果和上面是一样的;三是自己定义一个统一格式的数据体,作为统一规范的数据交换格式,也便于前端设计统一的解析规则。就像这样package com.chris.demo.models;import lombok.AllArgsConstructor;import lombo原创 2021-03-30 12:30:16 · 1145 阅读 · 3 评论 -
使用JHipster的几点心得
最近复习项目架构,钟情于Jhipster已经构建好的监控页面和接口文档等等,决定还是使用JHipster来构建项目。不出所料,每一次尝试构建都有一大堆的问题。由于每一次都要安装npm包,非常耗费时间,因此前前后后弄了三四天,不断修改代码,切换版本。总算有了一点小结论。我的欲求无非是以下几点。1. 正常注册,能够监控,能够多实例部署和自动路由,负载均衡;2. 接口文档能够正常显示,接口可以正常测试;3. 用户授权和权限验证能够正常工作;4. 可以嵌入业务模块。我提前安装好了所需要的环境原创 2021-03-23 05:35:28 · 642 阅读 · 1 评论 -
Springboot项目通过logstash将日志分类写入Elasticsearch
需求:我们需要把线上日志收集起来进行分析。在开发阶段,更多的时候程序是运行在本地,所以使用FileBeats就有点繁琐。我们采用直接将日志通过tcp输出到logstash的方案。同时,我们的日志并没有统一的格式,按照日志分析的需求格式都不一样。比如我们需要监控http请求的日志,监控websocket对话的日志,监控搜索gu关键词的日志等等。这就需要我们需要根据不同的需求制定各自的格式,然后分开输出到ES数据库。一、安装ELK这里对此不作过多讲解。es我使用的是docker版本,logstash原创 2020-08-12 09:39:46 · 3206 阅读 · 0 评论 -
SpringCloud Zuul网关实现路由和自动发现路由
我们做分布式系统,为了不暴露具体的服务,以及实现各种统一处理,常常使用网关来管理接口。SpringCloud分布式系统中常用zuul来实现网关功能。zuul最基本的功能,就是把所有的接口都收到自己这里,按照规则和负载均衡的配置分发。zuul实现路由最常用的方法是在属性文件properties或者 yml中进行配置。我们首先创建几个必要的服务:1. eureka注册中心按照正常方式创...原创 2020-03-14 16:53:48 · 1550 阅读 · 0 评论 -
解决JHipster Register5.x不能正确解析uaa的api docs的问题
最近在家,无法出门,研究分布式系统的架构。主要使用JHipster构建,而其中最关键的就是注册中心。github上面已经更新到6.1.1的版本,二我们上次使用的版本是3.2.4,我决定研究5.x的版本,于是拉取来5.0.0的源码进行修改、构建、部署、测试。但是在测试过程中遇到一个问题,就是3.x和4.x版本的注册中心都能正确解析uaa的接口文档,但是5.x和6.x都不行,一直有以下提示401...原创 2020-02-19 12:34:53 · 656 阅读 · 0 评论 -
Springboot整合Memcached
一、首先我们使用Centos架设memcached服务器,我们使用Docker来架设Memcached服务1. 拉取镜像docker pull memcached:1.5.162. 启动容器docker run --name memcached -p 11211:11211 -d memcached:1.5.16 memcached -m 128好了,使用docker架设m...原创 2019-11-28 18:22:40 · 346 阅读 · 0 评论 -
Springboot + Security + JWT + OAuth2 整合简单案例
参照上次 Spring Security + JWT 的简单应用一、建立一个Springboot项目,最终的项目结构如下二、添加pom依赖 <!-- OAuth2 --> <dependency> <groupId>org.springframework.security.oauth<...原创 2019-10-12 13:52:30 · 2481 阅读 · 1 评论 -
Spring Security + JWT 的简单应用
参照上次的例子:Spring Security简单应用https://blog.youkuaiyun.com/xxkalychen/article/details/102498016这个例子的应用场景是在调用接口的时候发现不能通过验证就自动跳转到登录页面登录,但是登陆成功之后,身份验证信息只是倚靠session来验证。在分布式服务中,我们每一次调用接口都会做验证,这就需要我们在登录时要获取一个jwt,每次...原创 2019-10-11 16:20:46 · 519 阅读 · 0 评论 -
基于retrofit网络请求token过期的处理逻辑
手机调用接口,关键数据请求需要验证token,token设置按照一定周期就过期。验证token需要判断token是否过期,如果过期就需要后台调用登陆接口获取新的token,并且用新的token替换原来的token,在后台继续完成原来未完成的请求。经过尝试,基本完成实现与优化。一、首先贴出接口代码,采用SpringBoot编写的简单接口:@RestControllerpublic cl原创 2017-08-31 15:42:34 · 2870 阅读 · 0 评论