Chinaunix首页 | 论坛 | 博客
  • 博客访问: 327228
  • 博文数量: 84
  • 博客积分: 886
  • 博客等级: 准尉
  • 技术积分: 769
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-30 19:32
文章分类

全部博文(84)

文章存档

2018年(1)

2017年(2)

2014年(1)

2013年(50)

2012年(30)

我的朋友

分类: LINUX

2013-08-23 15:22:37

Kestrel是一个scala写的twitter开源的消息中间件,特点是:
   
  1. 高性能
  2. 小巧(2K行代码)
  3. 持久存储(记录日志到journal)
  4. 可靠(支持可靠获取)
Kestrel的前身是Ruby写的项目,后来twitter的开发人员尝试用scala重新实现。它的代码非常简洁并且优雅,推荐一读。

  1. 可支持的标准协议:

  2.     SET 存
  3.     GET 取
  4.     FLUSH_ALL 清理
  5.     STATS 状态


  6. 扩展协议:

  7.     SHUTDOWN 关闭kestrel server,如果执行该操作,需强制重启Kestrel
  8.     RELOAD 动态重新加载配置文件
  9.     DUMP_CONFIG dump配置文件
  10.     FLUSH queueName flush某个队列
安装daemon,下载地址:
解压后

  1. ./configure && make && make install
kestrel安装:
安装极其简单,下载地址:,解压,完毕!


然后拷贝某博客的文章,懒着打字,尊重他人成果
转自:http://snowolf.iteye.com/blog/1604531

Kestrel目录结构如下:

  1. Kestrel
  2.   |-kestrel-1.2.7-SNAPSHOT.jar
  3.   |-kestrel-1.2.7-SNAPSHOT.pom
  4.   |-config
  5.       |-development.conf
  6.       |-production.conf
  7.   |-libs
  8.   |-scripts
  9.       |-devel.sh
  10.       |-kestrel.sh
  11.       |-qdump.sh
libs中的jar列表:

  1.     configgy-1.6.4.jar
  2.     naggati_2.7.7-0.7.4.jar
  3.     slf4j-jdk14-1.5.2.jar
  4.     twitteractors_2.7.7-2.0.0.jar
  5.     json-1.1.3.jar
  6.     scala-library.jar
  7.     specs-1.6.2.1.jar
  8.     vscaladoc-1.1-md-3.jar
  9.     mina-core-2.0.0-M6.jar
  10.     slf4j-api-1.5.2.jar
  11.     twitteractors-1.1.0.jar
  12.     xrayspecs-1.0.7.jar
我们只需要关注以下几个文件:
适用于开发环境:
  • script/devel.sh用于验证服务配置是否可用
  • config/development.conf配合devel.sh进行操作的配置文件
适用于生产环境:
  • scripts/kestrel.sh核心执行文件
  • config/production.conf核心配置文件

Kestrel脚本&配置说明
这里将Kestrel安装至/usr/local/kestrel路径下,你可能需要对应修改路径配置。
先说用于开发环境的脚本&配置文件:

  1. vim devel.sh

  2. #!/bin/bash
  3. echo "Starting kestrel in development mode..."

  4. # find jar no matter what the root dir name
  5. SCRIPT_DIR=$(cd `dirname "$0"`; pwd)
  6. ROOT_DIR=`dirname "$SCRIPT_DIR"`

  7. #java -server -Xmx1024m -Dstage=development -jar "$ROOT_DIR"/kestrel_2.9.2-2.4.1.jar
  8. java -server -Xmx1024m -Dstage=production -jar "$ROOT_DIR"/kestrel_2.9.2-2.4.1.jar  #表示使用production.scala配置文件

然后执行devel.sh进行测试:

  1. ./scripts/devel.sh
  2. Starting kestrel in development mode...
不要关当前的对话框,新开一个对话框执行命令:

  1. telnet localhost 22133
  2. Trying 127.0.0.1...
  3. Connected to localhost.localdomain (127.0.0.1).
  4. Escape character is '^]'.
  5. set x 0 0 5
  6. 12345
  7. STORED

  1. telnet localhost 22133
  2. Trying 127.0.0.1...
  3. Connected to localhost.localdomain (127.0.0.1).
  4. Escape character is '^]'.
  5. get x
  6. VALUE x 0 5
  7. 12345
  8. END
  9. get x
  10. END
如上操作,说明配置已成功。

然后进行生产环境配置:
kestrel.sh


  1. APP_NAME="kestrel"
  2. ADMIN_PORT="2223"
  3. VERSION="2.4.1"
  4. SCALA_VERSION="2.9.2"
  5. APP_HOME="/usr/local/$APP_NAME"  #保证app_name是安装队列的根目录
  6. INITIAL_SLEEP=15

  7. JAR_NAME="${APP_NAME}_${SCALA_VERSION}-${VERSION}.jar"
  8. STAGE="production"
  9. FD_LIMIT="262144"

  10. HEAP_OPTS="-Xmx256m -Xms256m -XX:NewSize=128m"   #这个地方是个坑啊,学过java的都知道,虚拟机600多M内存,大家悠着点
  11. GC_OPTS="-XX:+UseConcMarkSweepGC -XX:+UseParNewGC"
  12. GC_TRACE="-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintHeapAtGC"
  13. GC_LOG="-Xloggc:/var/log/$APP_NAME/gc.log"
  14. DEBUG_OPTS="-XX:ErrorFile=/var/log/$APP_NAME/java_error%p.log"

  1. 执行脚本启动,然后测试

  2. telnet localhost 22133
  3. Trying 127.0.0.1...
  4. Connected to localhost.localdomain (127.0.0.1).
  5. Escape character is '^]'.
  6. stats
  7. STAT uptime 52568
  8. STAT time 1343093076
  9. STAT version 1.2.7-SNAPSHOT
  10. STAT curr_items 0
  11. STAT total_items 1
  12. STAT bytes 0
  13. STAT curr_connections 1
  14. STAT total_connections 9
  15. STAT cmd_get 2
  16. STAT cmd_set 1
  17. STAT cmd_peek 0
  18. STAT get_hits 1
  19. STAT get_misses 1
  20. STAT bytes_read 91
  21. STAT bytes_written 151
  22. STAT queue_test_items 0
  23. STAT queue_test_bytes 0
  24. STAT queue_test_total_items 1
  25. STAT queue_test_logsize 27
  26. STAT queue_test_expired_items 0
  27. STAT queue_test_mem_items 0
  28. STAT queue_test_mem_bytes 0
  29. STAT queue_test_age 0
  30. STAT queue_test_discarded 0
  31. STAT queue_test_waiters 0
  32. STAT queue_test_open_transactions 0
  33. END
最后,拷贝kestrel.sh文件到/etc/init.d/路径下,并赋予执行权限:

  1. cp kestrel.sh /etc/init.d/kestrel
  2. chmod +x /etc/init.d/kestrel
  1. service kestrel {start|stop|restart|status}
PS:重点说明一点,队列名称/缓存键名称,一定不要始终“-”作为连接符,请使用“_”作为连接符,避免意想不到的错误。!

非常感谢楼上博客贡献者!~~向原创致敬




阅读(2632) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~