不积跬步,无以至千里


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

基于Java NIO实现服务端与客户端的非阻塞通信

发表于 2013-10-30 | 分类于 后端 | | 阅读次数:

Java从JDK 1.4开始支持NIO(New IO),与传统IO相比,NIO是非阻塞的,它包含三个核心组件:

  1. Channel,类似于Stream,但不同于Stream单向,Channel是双向的,从同一个Channel既可以读取数据,也可以写入数据;
  2. Buffer,向Channel写入数据或从Channel读取数据时,数据需先写入Buffer或读入Buffer;
  3. Selector,多个Channel可以注册到一个Selector中,Selector可以通过单线程侦听这些Channel,当有读、写、连接事件时(而不是阻塞等待读、写或连接),执行相应的操作。

基于Java NIO实现服务端与客户端的非阻塞通信如图所示:
java nio

阅读全文 »

Java开发问题总结

发表于 2013-10-12 | 分类于 后端 | | 阅读次数:

最近在做开发时,遇到了以下四个问题,总结一下。

Nginx+Struts中上传文件的大小限制。

在上传文件时,若文件太大会出现上传失败。我们的Web应用前端代理使用了Nginx,MVC使用了Struts,通过检查,发现在Nginx和Struts中对于上传文件的大小都做了限制。
在Nginx的http模块配置中,client_max_body_size这个参数用于表示http请求body最大值,由于文件也是以二进制形式存储于body中,因此client_max_body_size也限制了上传文件的大小,当上传文件较大时,可适当调大该值。

1
2
3
4
5
http {
...
client_max_body_size 20m;
...
}

阅读全文 »

JMS和ActiveMQ介绍(4)_ActiveMQ

发表于 2013-09-30 | 分类于 后端 | | 阅读次数:

ActiveMQ高可用性

幻灯片37
下面,我们再看看ActiveMQ是如何实现高可用的。
ActiveMQ实现高可用有两类方案:

  • 第一类方案是构建服务器网络,消息在服务器网络中进行传递,客户端通过failover或discovery连接网络中的一个服务器发送或接收消息,当服务器失效时,客户端自动重连另一个服务器。
  • 第二类方案是构建服务器主从集群,在某个时间只有一个服务器作为主对外提供服务,当主服务器失效时,从服务器切换成主服务器对外提供服务,客户端自动重连至新的主服务器。

MasterSlave有4种具体实现方案,下面将介绍一下前3种,第4种在官网上已有介绍,是基于HahaDBA和Zookeeper的,但目前还不支持该功能。

阅读全文 »

JMS和ActiveMQ介绍(3)_ActiveMQ

发表于 2013-09-30 | 分类于 后端 | | 阅读次数:

ActiveMQ介绍

1幻灯片21
首先简单介绍一下ActiveMQ。ActiveMQ是由Apache软件基金会提供的开源免费消息服务器,目前版本是5.8.0。
ActiveMQ具有以下特点:

  • 基于JMS 1.1和J2EE 1.4规范;
  • 支持多种连接协议:HTTP/S,IP组播,SSL,STOMP,TCP,UDP,XMPP等;
  • 支持多种消息持久化机制:文件形式持久化(KahaDB),关系数据库形式持久化(JDBC);
  • 插件化的安全机制:ActiveMQ支持插件开发,并且它的安全机制就是以插件形式实现灵活配置的;
  • 支持嵌入Java应用,ActiveMQ就可以作为一个单独服务,也可以直接嵌入到其他Java应用中;
  • 支持与应用服务器进行集成:支持Apache Tomcat,Jetty,ApacheGeronimo,Jboss;
  • 多种语言的客户端API:支持C/C++,.NET,Perl,PHP,Python,Ruby等;
  • 集群;
  • 动态化的简单管理。
阅读全文 »

JMS和ActiveMQ介绍(2)_JMS

发表于 2013-09-30 | 分类于 后端 | | 阅读次数:

JMS API

1幻灯片8
JMSAPI可以分为3个主要部分:公共API、队列API和主题API。
JMSAPI中,ConnectionFactory和Destination既可以作为受管对象,由JMS提供者创建,并使用JNDI从提供者获得,也可以直接动态创建;
其他接口通过工厂方法创建,比如Session可以通过Connection创建;
消息生产者和消费者一般仅创建一个连接(Connection),而可以创建多个会话(Session);
由Session保存用于消息发送的事务性工作单元。
通过Session可以创建Message,MessageProducer,MessageConsumer。

阅读全文 »

JMS和ActiveMQ介绍(1)_消息传送机制

发表于 2013-09-30 | 分类于 后端 | | 阅读次数:

JMS,java消息服务是由Sun提出的一套消息传送API规范,而ActiveMQ是一款开源的消息服务器产品,前一段在组内做过一次有关《JMS和ActiveMQ介绍》的技术分享,今天把幻灯片整理了一下,希望和大家多交流。

什么是消息传送机制

1幻灯片4
消息传送机制是在多个系统之间引入消息服务器,由消息服务器接收来自各系统的消息并将消息转发到相应的系统上,以实现各系统之间的通信。
而在每个系统中,应用程序通过调用消息传送API来进行消息的发送和接收,消息传送API再通过各消息服务器所对应的消息传送客户端将消息发送至服务器或从服务器接收消息。
目前,消息服务器产品中,
属于商业软件的有:IBM WebSphere MQ、SonicMQ、Microsoft Message Queuing(mSMQ);
属于开源软件的有:ActiveMQ、OpenMQ、RabbitMQ。
虽然消息服务器产品较多,但基本遵循同一个消息传送API规范,即JMS(Java Message Service,Java消息服务):

  1. JMS是由Sun发起创建;
  2. 它与JDBC类似,只定义消息传送的相关接口,由消息服务器产品自己实现相应的接口功能;

因此,在使用不同的消息服务器产品时,系统中的应用程序可以使用同一个消息传送API。

阅读全文 »

Maven中-DskipTests和-Dmaven.test.skip=true的区别

发表于 2013-09-27 | 分类于 后端 | | 阅读次数:

在使用mvn package进行编译、打包时,Maven会执行src/test/java中的JUnit测试用例,有时为了跳过测试,会使用参数-DskipTests和-Dmaven.test.skip=true,这两个参数的主要区别是:

阅读全文 »

AOP简介及Spring AOP的4种实现

发表于 2013-09-15 | 分类于 后端 | | 阅读次数:

AOP

AOP(Aspect Oriented Programing,面向切面编程)用于在不侵入原有代码的基础上,为代码统一添加新功能,例如性能监控、日志记录、事务管理等。AOP的原理如图所示:

aop
其中:

  1. 连接点(Jointpoint),表示方法执行的某个位置,如方法调用前、方法调用后、方法抛出异常等;
  2. 通知(Advice),表示需要在某个连接点加入的新功能,通知包括以下5种类型:Before advice,After returning advice,After throwing advice,After (finally) advice,Around advice;
  3. 切入点(Pointcut),用于描述某些类的某些方法;
  4. 切面(Aspect),通知和切入点组成切面,通过切面实现在指定类的指定方法上,加入通知。
阅读全文 »

ActiveMQ与业务系统的集成

发表于 2013-09-12 | 分类于 后端 | | 阅读次数:

ActiveMQ是一款基于Java的开源消息服务器产品,因此,我们可以将其集成到通过Java实现的业务系统中。下面将对集成方法做一个简单的总结。
首先,我们看一下ActiveMQ中的部分核心类:

195715742

阅读全文 »

SWFUpload文件上传时从后台返回中文乱码的问题

发表于 2013-09-11 | 分类于 后端 | | 阅读次数:

SWFUpload是一款使用Flash和Javascript开发的文件上传工具,最近在使用其实现文件上传功能时,发现从后台返回的中文经常乱码。
SWFUpload上传成功后,对后台返回结果的处理方法是:

1
2
3
function uploadSuccess(file, serverData) {
......
}

阅读全文 »
1…456…9
magicwt

magicwt

89 日志
9 分类
49 标签
GitHub E-Mail
© 2018 magicwt
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4