- 浏览: 32002 次
- 性别:
- 来自: 青岛
最新评论
文章列表
1 判断是否为linux系统
public static final String OS_NAME = System.getProperty("os.name");
if (OS_NAME != null && OS_NAME.toLowerCase().indexOf("linux") >= 0) {
isLinuxPlatform = true;
}
2 获取cpu个数
/**
* 默认为CPU个数-1,留一个CPU做网卡中断
*
...
- 2014-02-18 14:03
- 浏览 562
- 评论(0)
1.InetAddress.getLocalHost().getHostAddress()获取本机ip问题点击打开链接
2.java中的class.this方法,用在匿名类里面,明确表示匿名类内部实现表示的方法,直接用this代表匿名类上下文,而用class.this明确指定要引用的上下文,如外部类对象。如果匿名类和外部类含有同名方法,而且匿名类直接调用同名方法,虽然没有编译错误,但是容易让人误解
- 2014-02-13 15:28
- 浏览 418
- 评论(0)
1.定义ZookeeperClient接口,抽象类AbstractZookeeperClient实现ZookeeperClient接口。ZkclientZookeeperClient继承
AbstractZookeeperClient抽象类。使用zkclient类库。作为默认的实现
2.程序启动,构造Ephemeral节点
3.com.alibaba.dubbo.config.ServiceConfig负责生成节点内容。使用InetAddress.getLocalHost().getHostAddress();作为获取本地ip的方法,如果本机ip配置不正确,可能存在隐患
...
- 2014-02-13 15:27
- 浏览 718
- 评论(0)
1.项目骨架相关
1.1 在骨架pom中,可通过${package}引用生成的项目的指定的包名,对指定项目相关的信息,比如main类位置等比较有效
1.2 根据项目生成骨架 mvn archetype:create-from-project
1.3 在target下运行命令mvn clean package deploy,产生项目骨架
1.4 在target下的pom配置<distributionManagement>上传到私服,如:
<distributionManagement>
<repository>
<id> ...
- 2014-02-08 17:12
- 浏览 347
- 评论(0)
using System;
using System.Runtime.CompilerServices;
using System.Threading;
namespace Common.Engine
{
/// <summary>
/// 限流器
/// 改写自:hadoop\src\hdfs\org\apache\hadoop\hdfs\server\datanode\BlockTransferThrottler.java
/// </summary>
public class Throttler
{
...
- 2014-02-07 11:52
- 浏览 648
- 评论(0)
原则:
1.原子性:要保证操作是原子的,线程安全的,java的atomatic包里的AtomicInteger符合这种要求
2.正数性:数字在java中是用补码进行表示的,第一位为符号位,0代表正数,1代表负数,可以对递增的数值进行与0x7FFFFFFF(int类型,4个字节)操作,保证永远为正数。当递增超过0x7FFFFFFF时,又会从0开始递增
附metaq中的实现,这个主要用在轮询的分区选择器上RoundRobinPartitionSelector,用于均匀的选择分区
/**
* 正数的原子递增器,主要用于实现轮询
*
* @author apple
*
*/
publ ...
- 2014-02-07 11:07
- 浏览 978
- 评论(0)
1.producer调用publish方法是为了向zookeeper注册topic,同时注册broker节点改变事件,用于新机器加入时生产者的负载均衡
2.sendmessage时,先选择partition,再根据partition选择一台broker
3.构造putcommand,传入opaque给putcommand(自增,线程安全),用于区分command,主要作用是区分本地的回调方法(消息发送过快而服务器响应过慢,可能由于本地回调对象过多造成内存溢出)
3.调用RemotingClientWrapper(是gecko的RemotingClient对象的装饰器,提供统计消息功能)的s ...
- 2014-01-26 11:47
- 浏览 396
- 评论(0)
1.metaq如果不指定executor,则默认是单线程执行的。
2.如果一个consumer订阅了多个topic,也是单线程执行。
3.如果消费抛出异常,会重新加入到blockqueue(根据delayTimeStamp排序的优先队列),并更新延迟时间
4.当重试次数(在postReceiveMessage赋值,判断依据是iterator的offset是否为0)超过配置的最大值(默认为5次),则记录日志,丢弃消息
- 2014-01-21 14:41
- 浏览 691
- 评论(0)
metaq的启动脚本是这样实现的:
nohup $JAVA $BROKER_ARGS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.port=$JMX_PORT com.taobao.metamorphosis.ServerStartup $config_files 2>&1 >& ...
- 2014-01-15 18:25
- 浏览 1066
- 评论(0)
一种实现方式是(metaq是这种方式):
1.程序启动时写临时文件(亦可写到其他位置,如建立zookeeper永久节点)
2.注册ShutdownHook,在实现中删除临时文件
3.下次文件启动时,先判断临时文件是否存在,如果存在,则起线程对异常信息进行处理
liunx下kill -9不会使shutdownhook执行,eclipse调试下直接关闭也不会执行。使用kill -15可以使shutdownhook执行,具体可参考http://kenwublog.com/kill-java-correctly,http://blog.csdn.net/raintungli/article/ ...
- 2014-01-14 22:24
- 浏览 733
- 评论(0)
1.metaq的数据传输基于gecko2.metaq的RemotingClientWrapper是gecko的RemotingClient的包装类,通过ConcurrentHashMap<String/* url */, Set<Object>/* references */>成员变量添加了连接的建立和关闭计数功能。
3.remoteclient的连接语句如下:
for (int i = 0; i < connCount; i++) {
try {
final TimerRef timerRef ...
- 2014-01-14 12:02
- 浏览 1008
- 评论(0)
1.ZkConnection实现IZkConnection,是org.apache.zookeeper.ZooKeeper的代理类,通过ReentrantLock实现connect和close的并发控制。因为connect方法和close方法对成员变量_zk进行了赋值和判空操作,所有要进行并发控制。代码如下:
@Override
public void ...
- 2014-01-13 20:29
- 浏览 1889
- 评论(0)
zkclient通过BlockingQueue实现多线程的事件驱动,当zkClient对象构造时,调用connect方法启动eventthread线程,eventthread线程的run实现如下:
@Override
public void run() {
LOG.info("Starting ZkClient event thread.");
try {
while (!isInterrupted()) {
ZkEvent zkEvent = _events.take(); ...
- 2014-01-13 18:17
- 浏览 1929
- 评论(0)
1.org.I0Itec.zkclient.NetworkUtil,提供获取本机名称,端口是否被占用等功能,其中判断端口是否被占用的代码:
public static boolean isPortFree(int port) {
try {
Socket socket = new Socket("localhost", port);
socket.close();
return false;
} catch (ConnectException e) {
...
- 2014-01-13 17:55
- 浏览 524
- 评论(0)
1.debug as web项目
2.选择该web项目下的所有项目,确定
3.右键web项目,选择properties,找到deployment assembly项,然后add->java build path entries,将maven的依赖加入即可
- 2014-01-13 15:37
- 浏览 507
- 评论(0)