- 博客(66)
- 问答 (1)
- 收藏
- 关注
原创 kong 自定义插件access中获取真实代理的target
这个标题真的很难起,我在产生这个需求的时候,真是各种方式搜索了各种平台,都没有找到答案。最终在硬磕了几天之后,终于在kong源码中找到了解决方案。于是,我决定把我遇到的这个问题记录下来,但是,这个时候困扰我的就是,标题该如何定,才能容易被搜索到。需求:在kong的插件中,我要获取到真实代理的target,就是要找到最终请求IP和port,然后由我发送请求到这些IP上,不走nginx的代理了。这真是奇葩的需求,但这需求还真不少!!需求了解清楚了之后,就是要如何解决了,当了解方案之后,回过来看,
2021-08-06 16:13:54 552
原创 lua 字符串常用操作 - split contains lower upper
lua中对于字符串的操作是非常频繁的,如果你熟悉一种编程语言,那么你在编写lua代码的时候一定会想,在Java中支持的字符串切分split,在lua中是否支持呢?这里就给大家整理了一些lua中常见的字符串操作。整理6个常用方法:转大写、转小写、是否包含、反转、split切割1、字符串转小写 string.lower()-- 定义一个字符串local s = "abcDeF";-- 字符串转小写local trans = string.lower(s);print(trans); --
2021-08-06 15:47:38 1290
原创 linux下运行lua脚本
在linux下运行一个lua脚本很简单,下载一个lua编译器后,编译安装到操作系统,然后通过lua命令就可以运行lua脚本了。1、lua官网http://www.lua.org/2、点击download后,跳转到下载页面3、下载luacurl -R -O http://www.lua.org/ftp/lua-5.4.3.tar.gz4、解压tar -zxvf lua-5.4.3.tar.gz5、安装make6、运行直接输入lua,即可进入到交互..
2021-05-24 14:50:18 7251
原创 lua模块与面向对象
模块的定义与使用lua模块相关的内容在《openresty lua 模块》中已经写过了,定义模块也比较简单,这里再简单的过一下流程。1、编写模块 module.lua(1)定义一个.lua的文件,比如module.lua(2)在文件中定义一个字典对象(3)给字典对象赋予属性和方法(4)返回这个字典对象local m = {};-- 模块变量m.version=1.0;m.author="king";-- 模块方法m.log = function (str) p
2021-05-24 14:29:43 320
原创 Lua基础语法-变量-数组-函数-if-for-while
lua支持在多种平台下进行安装,具体安装参考《Windows下编写Lua程序》安装成功之后,可以了解下Lua 的基本语法,对于有过一门编程语言经验的朋友来讲,学习lua的基本语法也是非常简单的。1、定义变量lua在定义变量上非常类似于js,不需要声明变量类型,直接使用关键字 local 来定义变量,如(1)基础变量local a = 10; -- numberlocal b = "hello"; -- 字符串local c = 10.5; -- numberlocal d = t
2021-05-24 12:00:55 813
原创 Windows下编写Lua程序
Lua是一个非常小巧的嵌入式编程语言,经常会被嵌入到Redis、Nginx等系统中,对原有系统做一些功能的灵活扩展。一般来讲,Lua脚本极大程度都会运行在Linux下,也因此官方只提供了Linux下的安装包。但是在学习、开发和测试阶段,我们使用的都是Windows环境,那么在Windows下能够直接编译就方便多了,官方虽然没有提供,但是社区是有的,下面来看看具体的如何进行操作吧。1、在lua的官网点击download,调整到下载页,如下图2、点击上图中红色框中的,get binary 获取二进制
2021-05-24 10:24:15 2322
原创 openresty 连接redis
Redis是非常优秀的基于键值对的内存数据库,在项目中使用非常广泛。在高并发的项目中,经常会需要进行缓存的预热,或者部分数据在接入层就可以进行渲染,那么nginx和redis就成了绝配。在openresty之前,想要在nginx中连接redis那是非常难的一件事情,而有了openresty之后,一切就变得非常简单了。1、安装redis如果是要安装最新版本的redis,需要依赖gccwget http://download.redis.io/releases/redis-6.0.6.tar.g.
2021-05-19 12:43:40 1823
原创 openresty lua 模块
一个业务逻辑可能会非常复杂,不可能将所有的逻辑写到一个文件中,这就需要模块的概念。将公共方法抽取成为一个模块,在使用时可以调用这个模块的方法。lua中的模块有点类似于Java中类的抽象层级,但和类又有本质差别。定义一个模块 创建一个lua文件 test_module.lua,内容如下local count = 0 local function hello() count = count + 1 ngx.say("count : ", count)...
2020-07-26 22:02:40 794
原创 openresty 常用api
获取参数# 1 获取get方式传入的url参数location /lua_api_params { default_type 'text/html'; content_by_lua_block { local arg = ngx.req.get_uri_args(); for k,v in pairs(arg) do ngx.say("key:",k," val:",v); end;...
2020-07-26 22:01:35 706
原创 openresty 第一个程序
修改nginx配置文件,默认路径在:/usr/local/openresty/nginx/conf/nginx.conf修改后的文件如右图所示content_by_lua 指定一句lua代码content_by_lua_file 指定lua对应的文件content_by_lua_block 指定lua代码块校验修改后的nginx配置文件是否正确nginx -t重启nginxngin...
2020-07-26 22:00:22 304
原创 openresty 环境搭建
1.安装依赖的包yum install pcre-devel openssl-devel gcc curl2.下载并安装openresty# add the yum repo:wget https://openresty.org/package/centos/openresty.reposudo mv openresty.repo /etc/yum.repos.d/# update the yum index:sudo yum check-update#安装openre..
2020-07-26 21:59:19 1107
原创 Vert.x(vertx)操作Redis
Redis是一个基于Key-Value的非关系型数据库,在项目中经常用来做缓存、分布式锁等。关于Redis的基础知识,这里就不多说了,读者如果对这块内容不熟悉,可以先找些Redis相关的资料来学习。下面我主要来介绍下在Vertx中如何使用Redis,以及底层的实现原理。基本操作1.使用Redis和使用数据库一样,只需要导入相关的包,就可以了。这里只需要引入vertx-redis-clien...
2019-09-25 10:58:00 5967
原创 Vert.x(vertx)发送 HTTP/HTTPS请求
应用场景在应用系统中,经常会有类似于获取天气、发送短信、处理图像、支付等需求,这些需求实现都非常复杂,或者受到监管的限制,不是任何一个公司都可以做到的。但有些应用为了提升用户的体验,需要用到这些功能,比如饿了么会根据你所在的位置推荐附近的商家,在线商城需要在线支付,还有一些应用需要进行人脸识别等等。有需求就会有市场,于是就有很多的公司单独对外提供某种服务,比如支付宝就对外提供支付的功能...
2019-02-21 17:57:49 7743 2
原创 Vert.x(vertx) 事件总线(EventBus)与 远程服务调用
Event Bus(事件总线) 是Vert.x的神经系统,负责应用系统消息的传递。Vert.x各模块(Verticle)之间的相互调用就是通过Event Bus实现的,因此各Verticle之间是高度解耦的。Event Bus提供发布订阅功能和点对点的消息服务,类似于消息队列,每条消息在Event Bus上都有一个地址(address),发布者向这个地址发送消息,接收者从这个地址接收消息。...
2019-02-11 14:16:59 17829 13
原创 Vert.x(vertx) 认证和授权详解(包含认证和授权在Web系统中的使用)
每个线上系统几乎都是离不开认证和授权的,Vert.x提供了灵活、简单、便捷的认证和授权的支持。Vert.x抽象出了两个核心的认证和授权的接口,一个是AuthProvider,另一个是User。通过这两个接口,我们可以非常灵活的实现我们自定义的认证和授权方法。当然,Vert.x也给我们提供了使用JDBC、Shiro、MongoDB、JWT等授权的实现,我们可以直接使用。Vert.x提供的认证和...
2018-12-22 22:22:39 10319 4
原创 Vert.x(vertx) 连接MySQL、Oracle数据库
Vert.x提供异步访问数据库的API,可能这里有朋友会有疑惑,直接使用我们之前的熟悉的Mybatis或者Hibernate不行吗,可行,但数据库操作是一个耗时操作,使用传统的同步模型,容易阻塞线程,导致整体性能下降,因此我们对于数据库操作,需要使用Vert.x提供的异步API。Vert.x提供的API层级非常低,可以说是仅仅在原生JDBC基础上封装了一层异步接口。所有的对数据库操作都需要通过...
2018-12-13 15:59:24 14570 10
原创 Vert.x(vertx) 实现TCP服务
对于Java开发人员,想要实现一个http服务,非常简单,写个servlet,打成war包,放到tomcat下就能运行。但如果要实现一个tcp服务就没那么简单了,因为tcp是传输层协议,并不像http那样,有类似tomcat的中间件给我们封装底层的网络协议,封装线程的交互。要实现一个tcp服务,只能自己动手处理网络和线程问题,这是非常考验编程功底的事情,而且如果团队人员素质不高,项目周期要求较短的...
2018-12-07 14:43:04 15894 11
原创 Vert.x(vertx) Web开发-路由
在Vert.x 创建HTTP服务 中我们已经创建了一个简单的HttpServer,但这个HttpServer比较低级,对于请求参数解析、Session等常用功能都需要我们通过编码实现,也就是要重复造轮子,非常不方便。Vert.x提供了Web开发组件vertx-web,提供了一堆Web开发中常用的功能。比如参数封装,路由,国际化,认证和授权,session和cookie以及模板等,可以非常方便的...
2018-07-03 16:21:46 20918 23
原创 Vert.x(vertx) 创建HTTP服务
Vert.x底层通信框架依赖于Netty,并封装了对Http协议的支持,因此可以非常方便的进行Web开发,且不依赖于任何中间件。笔者所在的公司老系统使用的是SSM架构的项目,部署在Weblogic上,每年花在中间件上的钱就非常多,现在全面改造为Vert.x,中间件的费用直接就省了。另外不依赖中间件,编程会变得非常灵活,定制性非常强,安全性也会得到一定层度的提高。对于实现一个简单的web服务,有...
2018-06-25 18:09:11 14707 1
原创 Vert.x(vertx) 简明介绍
摘要Vert.x最大的特点就在于异步(底层基于Netty),通过事件循环(EventLoop)来调起存储在异步任务队列(CallBackQueue)中的任务,大大降低了传统阻塞模型中线程对于操作系统的开销。因此相比较传统的阻塞模型,异步模型能够很大层度的提高系统的并发量。Vert.x除了异步之外,还提供了非常多的吸引人的技术,比如EventBus,通过EventBus可以非常简单的实现分布...
2018-06-22 15:43:28 68104 27
原创 Oracle Database Link 跨数据库操作
有这么一个需求,要搭建测试环境,需要把开发库中的一部分表和数据导入到测试库中。咋一看这个需求有很多的实现方法,至少可以使用Oracle的导入导出来操作。这肯定能够实现,但感觉比较low,下面来看一种高大上的做法,使用Oracle的DATABASE LINK。DATABASE LINK 顾名思义,就是数据库的连接,功能就是连接到其他的数据库,并对其他的数据进行方便的操作。但从这一点来看,是不是就...
2018-06-07 10:02:58 7561
原创 PL/SQL中文乱码问题
最近工作原因开始接触Oracle,对于用习惯MySQL的我还是有些不适应的,首先就是开发工具的改变。在Oracle下,PL/SQL dev可以说是Oracle客户端工具中的绝对霸主,那么要使用Oracle自然少不了使用PL/SQL dev。最近就遇到一个传说中的乱码问题。经过一翻询问和网上查找资料,终于找到了解决办法,解决的方案也非常简单。1.查询数据库使用的编码select use...
2018-06-07 09:31:17 4358
原创 log4j 日志框架使用
Log4j是Apache下的一款开源的日志框架,能够满足我们在项目中对于日志记录的需求。一般来讲,在项目中,我们会结合slf4j和log4j一起使用。Log4j提供了简单的API调用,强大的日志格式定义以及灵活的扩展性。我们可以自己定义Appender来满足我们对于日志输出的需求。什么是日志框架我们在系统中对于记录日志的需求并不单纯。首先,我们希望日志要能持久化到磁盘,最基本的就是要能够保...
2018-05-24 11:31:50 16621 3
原创 SpringMVC整合Swagger出现Unable to infer base url. This is common when using dynamic servlet 错误
错误具体信息如下:Unable to infer base url. This is common when using dynamic servlet registration or when the API is behind an API Gateway.The base url is the root of where all the swagger resources are ser...
2018-03-19 16:17:21 13992 5
原创 nginx开机自启动和实现服务管理
nginx是以源码包的形式发布的,我们安装完毕之后,可以通过/usr/local/nginx/sbin/nginx 来运行,停止和重启nginx。这虽然可行,但使用起来比较麻烦,我们希望可以把nginx作为linux服务来进行管理,通过service nginx start这种形式来开启nginx服务,并且能够随系统自动启动。实现这个功能其实非常简单,因为nginx已经给了支持。先来说一说实现...
2018-03-16 09:21:12 4232 2
原创 SVN不提交.projects .settings target等文件
开发工具: Eclipse Maven SVN当我们写完代码提交到版本库的时候,SVN插件往往会把.classpath,.settings之类的文件一并提交。如果我们使用了maven,还会把target一起提交,这并不是我们想要的,除了我们自己可以注意不提交以外,还有没有更好的办法来处理呢,肯定是有的。只需要在Eclipse中配置忽略的资源就可以了,步骤如下:1. 选择菜单栏Wind...
2018-01-11 10:10:08 3504 3
原创 使用Java客户端API操作Zookeeper
使用Java客户端API操作Zookeeper使用Java客户端API操作Zookeeper准备环境连接到zookeeper创建节点查询节点获取子节点的内容列出子节点修改节点关于Watcher删除节点在了解了使用zkCli操作zookeeper之后,下面就是使用Java来操作zookeeper。就像操作数据库一样,数据库可以使用客户端工具来连接,也可以提供Java的api来链接。至于为
2017-11-03 16:22:12 4669
原创 通过zkCli操作ZooKeeper
客户端脚本zkCli使用ZooKeeper提供了客户端脚本方便的我们对ZooKeeper进行操作 安装信息 zkHome : /usr/local/zookeeper连接到ZooKeeper通过bin目录下的zkCli可以连接到ZooKeeper,如果不指定任何参数,默认连接的是本机的2181端口。./usr/local/zookeeper/bin/zkCli.sh -server 192.1
2017-11-02 15:58:02 3367
原创 CentOS6.9搭建ZooKeeper环境
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。在分布式泛滥的今天,ZooKeeper发挥着非常大的作用。ZooKeeper是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口...
2017-11-02 15:35:33 616
原创 Java虚拟机类加载(解析阶段)
解析解析阶段是将常量池中的符号引用替换为直接引用的过程。在进行解析之前需要对符号引用进行解析,不同虚拟机实现可以根据需要判断到底是在类被加载器加载的时候对常量池的符号引用进行解析(也就是初始化之前),还是等到一个符号引用被使用之前进行解析(也就是在初始化之后)。到现在我们已经明白解析阶段的时机,那么还有一个问题是:如果一个符号引用进行多次解析请求,虚拟机中除了invokedynamic指令外,虚拟机
2017-10-20 09:27:39 5291
原创 java多线程的6种实现方式详解
多线程的形式上实现方式主要有两种,一种是继承Thread类,一种是实现Runnable接口。本质上实现方式都是来实现线程任务,然后启动线程执行线程任务(这里的线程任务实际上就是run方法)。这里所说的6种,实际上都是在以上两种的基础上的一些变形。继承Thread类万物皆对象,那么线程也是对象,对象就应该能够抽取其公共特性封装成为类,使用类可以实例化多个对象,那么实现线程的第一种方式就是继承...
2017-10-12 12:41:57 60499 23
原创 SpringBoot创建Web应用
工欲善其事必先利其器,SpringBoot应用开发推荐两款开发工具1. STS(Spring Tool Suit) 是Spring官方推荐的工具,在Eclipse的基础上提供了开发SpringBoot的插件,下载地址为:https://spring.io/tools2. Idea,这是一个传说中最好用的收费的开发工具,也提供了对SpringBoot的支持。下载地址:https://www....
2017-09-07 18:06:39 2295
原创 获得jquery-datatables 选中的行的内容
或许之前对于jQuery-datatables的理解有误,只是单从一个后端开发者的角度去理解确实感觉这个前端框架不像easyUI那样好用,也不像bootstrap那样简洁。实际上,任何一个框架都是有它存在的理由,如果从前端的角度来理解jQuery-datatables似乎就比较合理了,不需要重头开始写table,样式和常用的事件都封装好了,实际上也是挺好用的。======下面是之前的内容我...
2017-09-06 12:38:27 12586 2
原创 Spring AOP(aop) 详解
Spring有两大核心,一个是IOC,一个是AOP。IOC比较好理解,控制反转,也就是将bean的控制权交给Spring来管理,让对象之间解耦。但是对于AOP,只是听老师说功能非常强大,却一直没有领略到其强大之处。却是被通知,切入点,切面,切点表达式这一堆的概念所迷惑。感觉AOP离我们遥遥无期,遥不可及。导致这种情况并不能怪老师,而是想要领略到AOP的强大,是需要大的项目规模来进行支撑的...
2017-08-30 17:10:32 625
原创 MyCat用户配置-添加用户、修改用户、删除用户、重置用户密码
我们在首次使用客户端登录的时候,我们可以使用一个名字为root,密码为123456的这么一个账户。这个账户是MyCat给我们创建的一个默认用户,那么这个用户是在哪里指定的,或者又如何创建的呢。这个问题其实非常简单,我们看到在mycat的目录下有一个conf目录,这个目录就是用来存放配置文件的目录,其中有一个配置文件叫做server.xml。打开这个文件,我们就很清楚用户的配置了。<...
2017-08-23 15:37:05 5118
原创 linux安装jdk(RPM方式和tar.gz方式)
安装有两个过程,第一个是下载,第二个是安装。安装之前要下载Java的安装包,在下载之前,我们先来掰扯一下Java的各种版本。众所周知,Java是免费开源的,这里的开源有两层含义,第一是Java本身是开源的,第二其规范也是开源的。这也就意味着Java可以有多个虚拟机,可以有多个编译环境。这里说这个问题跟我们安装jdk没有任何关系。只是告诉大家,我们安装的是Java虚拟机,以及Java的...
2017-08-08 12:17:29 3421
原创 Java方式配置SpringMVC
SpringMVC在Web开发中可以说是绝对的霸主,之前国内的Web开发框架可能还被Struts,Struts2占据。但现在,几乎所有的公司在做Web开发上,都会选择使用SpringMVC。SpringMVC和Spring整合上可以说是无缝的,但很多的朋友可能和我一样,看着密密麻麻的XML配置文件,不知道该如何配置。好在Spring3的时代,给我们提供了更加便捷的配置方式,使用Java配置Sp...
2017-07-27 09:06:25 938
原创 Eclipse的Thymeleaf代码提示功能
在Eclipse中安装Thymeleaf插件即可。插件的地址为:http://www.thymeleaf.org/eclipse-plugin-update-site/安装过程可以见http://blog.csdn.net/king_kgh/article/details/76084398
2017-07-25 16:47:56 11885 3
原创 Eclipse插件安装(在线和离线方式)
Eclipse是基于插件的,插件为Eclipse提供了极大的扩展能力。我们经常会用到一些Eclipse中没有给我提供的一些功能,比如SVN,比如Thymeleaf的编辑工具,比如ADTBundle等等,都是通过插件来完成,那么如何安装需要的插件到Eclipse中呢?插件的安装一般有三种方式,第一种是下载到本地来安装,第二种是在线安装,第三种是直接通过Eclipse提供的MarketPlace来...
2017-07-25 16:42:50 48482 3
原创 Spring 计划任务
我们在Java中可以通过Timer类来执行定时任务,在spring中,给我提供了更加便捷的计划任务。我们可以通过@EnableScheduling来开启计划任务,通过@Scheduled来定义一个计划任务。 我们先来看@Scheduled的源码@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})@Retention(R...
2017-07-25 08:58:54 826
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人