![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
5207
这个作者很懒,什么都没留下…
展开
-
在Openfire上弄一个简单的推送系统
推送系统说是推送系统有点大,其实就是一个消息广播功能吧。作用其实也就是由服务端接收到消息然后推送到订阅的客户端。思路对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息。这样的好处就是有消息后才向客户端推送,相比于拉取数据不会产生许多无效的查询,实时性也高。xmpp这种即时通信协议基于TCP长连接还是比较符合这种场景的。只需要在服务端增加一个模块用于接收用户订阅与数据的推送就完原创 2016-09-13 09:52:16 · 2659 阅读 · 3 评论 -
Tomcat shutdown执行后无法退出进程问题排查及解决
问题定位及排查上周无意中调试程序在Linux上ps -ef|grep tomcat发现有许多tomcat的进程,当时因为没有影响系统运行就没当回事。而且我内心总觉得这可能是tomcat像nginx一样启动多个进程。后来测试在一次升级后反馈说怎么现在tomcat进程无法shutdown?这让我有点意外,看来这个问题并没有这么简单。于是开始思考问题会出在哪里。复现问题先是另外一台服务器部署,然后shut原创 2016-11-28 13:55:55 · 3730 阅读 · 0 评论 -
Apache Ignite之集群应用测试
集群发现机制在Ignite中的集群号称是无中心的,而且支持命令行启动和嵌入应用启动,所以按理说很简单。而且集群有自动发现机制感觉对于懒人开发来说太好了,抱着试一试的心态测试一下吧。在Apache Ignite中有三种自有的发现机制:组播、静态IP、组播+静态IP。下面就这几种来试一试吧。测试方法简述测试的方法主要是通过搭建2台tomcat服务器,使用nginx来代理这2台tomcat,tomcat服原创 2016-11-23 17:06:45 · 5535 阅读 · 1 评论 -
学习AOP之深入一点Spring Aop
上一篇《学习AOP之认识一下SpringAOP》中大体的了解了代理、动态代理及SpringAop的知识。因为写的篇幅长了点所以还是再写一篇吧。接下来开始深入一点Spring aop的一些实现机制。上篇中最后有那段代码使用了一个ProxyFactory类来完成代理的工作,从而实现了Aop的Around Advice,代码如下:package aop.demo;import org.springfram原创 2016-11-11 17:53:40 · 625 阅读 · 0 评论 -
VisualVM通过jstatd方式远程监控远程主机
配置好权限文件[root@test bin]# cd $JAVA_HOME/bin[root@test bin]# vim jstatd.all.policy grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission;};执行命令启动jstatd -J-D原创 2016-10-20 17:38:16 · 1085 阅读 · 0 评论 -
学习AOP之认识一下Spring AOP
心碎之事要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口。 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是java基础不行。可见这还是挺重要的一个概念。在看工作中也遇到了相关的问题,在RPC的一种实现机制里应用了AOP,结果各种类一直绕来绕去看着头都大了,这也就是没有对动态代理和aop有了解导致的。所以要好原创 2016-11-10 18:17:01 · 764 阅读 · 0 评论 -
加深一下BlockingQueue的认识
认识BlockingQueueBlockingQueue是一种可以阻塞线程的队列,java中对这种队列提供了方法抽象,BlockingQueue则是抽象的接口。add:添加元素到队列里,添加成功返回true,由于容量满了添加失败会抛出IllegalStateException异常offer:添加元素到队列里,添加成功返回true,添加失败返回falseput:添加元素到队列里,如果容量满了会阻原创 2016-10-10 16:44:03 · 439 阅读 · 0 评论 -
java中的锁
java中有哪些锁这个问题在我看了一遍synchronized首先来看看用的比较多的synchronized,我的日常工作中大多用的也是它。synchronized是用于为某个代码块的提供锁机制,在java的对象中会隐式的拥有一个锁,这个锁被称为内置锁(intrinsic)或监视器锁(monitor locks)。线程在进入被synchronized保护的块之前自动获得这个锁,直到完成代码后(也可能原创 2016-09-28 17:34:05 · 1321 阅读 · 0 评论 -
ApacheIgnite高性能分布式网格框架-初探
Apache Ignite初步认识今年4月开始倒腾openfire,过程中经历了许多,更学到了许多。特别是在集群方面有了很多的认识,真正开始认识到集群的概念及应用方法。在openfire中使用的集群解决方案是代理+分布式内存。所谓代理便是通过一个入口转发请求到多个服务实例。而分布式内存就是解决服务实例间数据共享问题。通过这两步就可以搭建出一套水平扩展的集群系统。openfire使用的分布式内存计算框原创 2016-11-04 14:23:41 · 6553 阅读 · 3 评论 -
Openfire集群源码分析
如果用户量增加后为了解决吞吐量问题,需要引入集群,在openfire中提供了集群的支持,另外也实现了两个集群插件:hazelcast和clustering。为了了解情况集群的工作原理,我就沿着openfire的源代码进行了分析,也是一次学习的过程。 首先理解集群的一些简单概念集群的目的是让多个实例像一个实例一样运行,这样就可以通过增长实例来增长计算能力。也就是所谓的分布式计算问原创 2016-10-24 16:50:53 · 607 阅读 · 0 评论 -
Openfire的启动过程与session管理
说明 本文源码基于Openfire4.0.2。 Openfire的启动 Openfire的启动过程非常的简单,通过一个入口初始化lib目录下的openfire.jar包,并启动一个XMPPServer实例。 下面就是ServerStarter.start方法的代码片断: Class containerCla原创 2016-10-24 16:48:12 · 1008 阅读 · 0 评论 -
记一次tomcat线程创建异常调优:unable to create new native thread
测试在进行一次性能测试的时候发现并发300个请求时出现了下面的异常: HTTP Status 500 - Handler processing failed; nested exception is java.lang.OutOfMemoryError: unable to create new native thread看到这个异常有点发慌,毕竟并发程序写的少,突然来这么一个确实有点找不着背原创 2016-10-24 14:33:20 · 6110 阅读 · 0 评论 -
java中的字符串相关知识整理
字符串为什么这么重要写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生。每学一门编程语言就会与字符串这个关键词打不少交道。看来它真的很重要。字符串就是一系列的字符组合的串,如果写过C/C++的应该就了解,在字符串的操作上会有许多操作的函数与类,用于简化代码的开发。一方面是因为字符串在代码中会频繁用到,另一方面是因为字符串的操作非常麻烦。最初我知道String的特殊待遇就是在del原创 2016-09-21 14:45:10 · 480 阅读 · 0 评论 -
ThreadLocal简单理解
在java开源项目的代码中看到一个类里ThreadLocal的属性:private static ThreadLocal clientMode = new ThreadLocal印象中在看书的时候见到过ThreadLocal,但突然就想不起它的用处了。。心里一惊感觉当时书白看了。于是马上网上查了查。 原来它的意思是线程的本地变量,ThreadLocal更原创 2016-08-22 14:57:57 · 449 阅读 · 0 评论 -
教你如何把openfire的muc聊天室改造为群
openfire群聊与QQ群对比应该是去年的时候开始接触openfire,当时在分析后发现基于xmpp协议的openfire已经具备了群聊的功能。也就没太当回事,觉得加点功能就可以做成类似于QQ群的那种模式。后来仔细了解后才发现并不是这么简单:muc其实聊天室的形式,房间创建后可以加入聊天,用户离开就退出聊天室了,并没有一个用户固化的功能,所以要单独为这部分开发 muc因为没有固化的成员...原创 2019-09-17 09:52:48 · 614 阅读 · 0 评论