使用ActiveMQ完成Request和Reply模式

这几天一直在学习JMS标准,也在看《activemq in action》这本书,当中有几个比较好的例子我这边来分享下。 首先是,ACTIVEMQ的本机环境搭建问题。关于这个,我建议大家阅读这篇文章:Using ActiveMQ > Getting Started 一般介绍如何启动ActiveMQ,都是运行activemq脚本,但是我喜欢用的是activemq-admin这个脚本,原因是,我可以看到监控的 状态。这样就可以做一些简单的判断了,比如当前系统的运行状况,和负载情况。 怎么判断你的ActiveMQ已经可以正常运行了呢,你只需要打开http://localhost:8161,当然这是默认设置的效果,你也可以 进行端口的修改。如果你看到了ActiceMQ的界面,说明MQ已经启动完成。你可以开始编写代码了。 先申明一点,... [阅读全文]

Btrace调试Java代码

之前有一个同学提到了一个需求,就是需要在程序跑起来之后查看程序的调用情况,和一些参数变化,当然,如果 没有部署到生产环境中,我们可以用强大的Eclipse使用Debug模式进行单步调试。但是一旦部署到了生产环境中, 我们的强大的调试工具就失去了作用。 于是我们可以参考使用JVisualVM中的Btrace。当然本文章的大部分内容都有参考周志明的深入理解Java虚拟机 接下来的内容就是简单的介绍下Btrace的一个简单的示例。 当然,使用JVisualVM连接JVM的简单步骤我们就简单的跳过了。我们直接上程序例子。 首先是我们的Example代码。 代码很简单,之所以需要在执行之前加入scanner,只是因为我们需要为之后的Btrace嵌入做一个缓冲。然后可以 手动的形式启动我们的代码。 ... [阅读全文]

蘑菇街之行

说来也巧合,在内推网上投了阿里的内推,然后很机缘巧合的接到了蘑菇街的面试电话。 第一面是IM部门的负责人的面试,所以主要的交流都是在消息机制一块,因为之前写过一个消息机制的框架,可以看我得GitHub-Omniscient(顺风耳)。 然后再阐述了自己对消息中间件的理解,基本都是集中在消息的处理和传递的过程。之后也谈了一些Java的基本问题,也是几次面试下来我被面试的最多的 一个问题,就是Java的内存模型,也就是HotSpot虚拟机的分代垃圾回收机制。聊完之后,就是一个简单的算法题,然后其中还穿插者Java的集合源代码。 比如HashMap的线程问题,和HashTable的区别,然后ConcurrentHashMap和HashTable的联系和区别。等等,总之回答的也就是基于源代码的,感觉还不错。 于是就这样,一面算是过了。后来知道蘑菇街的IM团队是用C++的,而不是Java。... [阅读全文]

Java的Callable和Future接口及Fork/Join模型

目前已经大三下了,马上就要准备实习了,所以也开始好好复习之前的一些内容了,对于Java中的callable和future之前也是有所了解,但是 因为项目的原因,一直都没有好好的系统的学习,所以这段时间,就将其他的事情放在一边,好好的准备面试了。 之前看过了Java中的集合框架,估计最近也要写一篇响应的博客好好复习以下。 那么,现在就开始好好的玩Callable了! 首先看一下Callable的一个最简单的示例,就是他~ 最明显的一点,我们可以发现最简单的一个和Runnable的区别,就是他的call方法(相当于run())是存在返回值的,这一点有什么好处呢。我得感触 的最深的一点就是可以异步的获取线程的值了,因为之前我常做的一件事情就是在某个线程中申请一个static变量,然后进行传值,但是不好的一 ... [阅读全文]

Java与C通过管道进行交互

最近的一个项目需要使用到Java和C通信的,因为是在安卓上,所以我们能使用的方法有限(安卓上只支持部分Java,还有C也是精简的库)。 当然,使用本地Socket是一个简答你的解决办法。但是不是特别的优美。于是,我们准备使用Linux上使用的最多的管道进行通信。 之前查阅了一些资料,因为大部分网络上介绍Java管道的都是Java中的PipedStream,这个确实是管道类,但是很可惜,为了Java的操作 系统无关性,这个管道只适用于同一个JVM中,也就是说,他无法和其他VM或者是非Java语言进行交互。所以说,使用前还是需要看清JDK 说明文档。 如果想详细了解PIPE,可以参考这篇文章深入理解PIPE,当然,还有我们的维基百科 接下来开始说我的代码了。 先是Java代码: 这边,我是简单的... [阅读全文]

Tomcat接受HTTP请求详解

在前一篇文章中我们提到了Tomcat的启动的详细过程,当然,这只是很简单的通过代码的解释, 在Tomcat的启动的过程中还用了生命周期的方式去管理组件,这一部分内容可以参考这篇博客: I'm Tiger - Tomcat组件生命周期管理 代码详解 接下来,我来详细的分析下Tomcat的处理HTTP请求的详细过程。首先我们需要知道Tomcat中有一个叫做Connector的接口,一开始 我也以为这是接受HTTP请求的地方,因为HTTP实质上还是一个TCP数据包,所以,在不使用NIO的情况下,会建立一个Socket套接字 来进行数据的交换,所以,一开始我的方向是在Connector和他的子类中寻找,不过,很快就放弃了,因为他的接口只提供Request 和Response的访问接口,所以,我觉得因该有个地方将这个操作封装了。于是乎,我开始下断点分析。于是我... [阅读全文]