黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

征服 Kestrel

系統 2025 0
因為要面對高并發PUSH需求,考慮將其按隊列方式實現,最終選型Kestrel。
至于Kestrel:
  • 基于Scala語言的Twitter開源消息中間件
  • 高性能(TPS 6000不成問題)、小巧(2K行代碼)、持久存儲(記錄日志到journal)并且可靠(支持可靠獲取)
  • Kestrel 的前身是 Ruby 寫的 Starling 項目,后來twitter的開發人員嘗試用Scala重新實現。

可支持的標準協議:
  • SET 存
  • GET 取
  • FLUSH_ALL 清理
  • STATS 狀態

擴展協議:
  • SHUTDOWN 關閉kestrel server,如果執行該操作,需強制重啟Kestrel
  • RELOAD 動態重新加載配置文件
  • DUMP_CONFIG dump配置文件
  • FLUSH queueName flush某個隊列

經測試,支持 DELETE 協議!

PS: XMemcached-1.2 及其以上版本已對其協議完全支持,注意使用 KestrelCommandFactory

當然, Redis 也可以做消息隊列,但 Redis 目前只是 Master-Slave 模式,還不能像 Kestrel 做到 Cluster 。所以,如果只是考慮隊列服務,還是純粹一點,直接用 Kestrel ,配合 XMemcached 作為客戶端,保持一致性哈希,用起來更放心。因為,高可用嘛!呵呵!

想要消化Kestrel,需要做些準備工作:

本想Git下來,逐個編譯一把,但始終未果,只好找兄弟copy一份來運行!
我會在附件中,追加相應的配置文件,以及kestrel-2.1.5.jar。

如果你的Server還沒有安裝Daemon,參考如下操作:
Shell代碼 復制代碼 收藏代碼
  1. wget http://libslack.org/daemon/download/daemon- 0.6 . 4 .tar.gz
  2. tar zxvf daemon- 0.6 . 4 .tar.gz
  3. cd daemon- 0.6 . 4
  4. ./configure && make && make install


一、Kestrel目錄結構
Kestrel目錄結構如下:
Kestrel
|-kestrel-1.2.7-SNAPSHOT.jar
|-kestrel-1.2.7-SNAPSHOT.pom
|-config
|-development.conf
|-production.conf
|-libs
|-scripts
|-devel.sh
|-kestrel.sh
|-qdump.sh

libs中的jar列表:
  • configgy-1.6.4.jar
  • naggati_2.7.7-0.7.4.jar
  • slf4j-jdk14-1.5.2.jar
  • twitteractors_2.7.7-2.0.0.jar
  • json-1.1.3.jar
  • scala-library.jar
  • specs-1.6.2.1.jar
  • vscaladoc-1.1-md-3.jar
  • mina-core-2.0.0-M6.jar
  • slf4j-api-1.5.2.jar
  • twitteractors-1.1.0.jar
  • xrayspecs-1.0.7.jar

由于附件體積限制,可能需要另行下載(Maven是個好幫手!
我們只需要關注以下幾個文件:
適用于開發環境:
  • script/devel.sh 用于驗證服務配置是否可用
  • config/development.conf 配合 devel.sh 進行操作的配置文件


適用于生產環境:
  • scripts/kestrel.sh 核心執行文件
  • config/production.conf 核心配置文件


二、Kestrel腳本&配置說明
這里將Kestrel安裝至 /opt/servers/kestrel 路徑下,你可能需要對應修改路徑配置。
先說用于開發環境的腳本&配置文件:
devel.sh
引用

#!/bin/bash
APP_NAME="kestrel"
#應用路徑
APP_PATH="/opt/servers/kestrel"
#版本
VERSION="1.2.7-SNAPSHOT"

echo "Starting kestrel in development mode..."
java -server -Xmx1024m -Dstage=development -jar $APP_PATH/$APP_NAME-$VERSION.jar

注意修改 APP_PATH

development.conf
引用

# kestrel config for a production system

# where to listen for connections:
port = 22133
host = "0.0.0.0"

log {
#日志路徑
filename = "/var/logs/kestrel_development.log"
roll = "daily"
level = "info"
}

queue_path = "/var/spool/kestrel"


做一個簡單的測試:
引用
./scripts/devel.sh
Starting kestrel in development mode...

進行如下操作:
引用

telnet localhost 22133
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set x 0 0 5
12345
STORED

在另一個終端上獲得該消息:
引用

telnet localhost 22133
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get x
VALUE x 0 5
12345
END
get x
END

如上操作,說明配置已成功。

如法炮制生產環境配置:
kestrel.sh
引用

APP_NAME="kestrel"
VERSION="1.2.7-SNAPSHOT"
#Kestrel路徑
APP_HOME="/opt/servers/$APP_NAME"
AS_USER="daemon"
DAEMON="/usr/local/bin/daemon"
QUEUE_PATH="/var/spool/kestrel"

HEAP_OPTS="-Xmx2048m -Xms1024m -XX:NewSize=256m"
JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=22134 -Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false"
# add JMX_OPTS below if you want jmx support.
#如果需要控制字符集,使用-Dfile.encoding=UTF8
JAVA_OPTS="-server -verbosegc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+
UseConcMarkSweepGC -XX:+UseParNewGC $HEAP_OPTS"

你可能需要修改APP_HOME變量


production.conf

引用

# kestrel config for a production system

# where to listen for connections:
port = 22133
#建議綁定主機IP
host = "0.0.0.0"

log {
filename = "/var/logs/kestrel.log"
roll = "daily"
level = "info"
}

#隊列存儲路徑,用于存儲/恢復隊列消息,建議存放在磁盤較大的區域
queue_path = "/var/spool/kestrel"

建議綁定 host ,確保服務器安全

可以重復上述測試操作,測試服務是否可用!
或者,直接查看服務狀態——STATS!
引用
telnet localhost 22133
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
stats
STAT uptime 52568
STAT time 1343093076
STAT version 1.2.7-SNAPSHOT
STAT curr_items 0
STAT total_items 1
STAT bytes 0
STAT curr_connections 1
STAT total_connections 9
STAT cmd_get 2
STAT cmd_set 1
STAT cmd_peek 0
STAT get_hits 1
STAT get_misses 1
STAT bytes_read 91
STAT bytes_written 151
STAT queue_test_items 0
STAT queue_test_bytes 0
STAT queue_test_total_items 1
STAT queue_test_logsize 27
STAT queue_test_expired_items 0
STAT queue_test_mem_items 0
STAT queue_test_mem_bytes 0
STAT queue_test_age 0
STAT queue_test_discarded 0
STAT queue_test_waiters 0
STAT queue_test_open_transactions 0
END

最后,拷貝 kestrel.sh 文件到 /etc/init.d/ 路徑下,并賦予執行權限:
Shell代碼 復制代碼 收藏代碼
  1. cp kestrel.sh /etc/init.d/kestrel
  2. chmod +x /etc/init.d/kestrel


后續,我們就可以通過服務方式,調用kestrel了!
引用

service kestrel {start|stop|restart|status}


由于jar文件較大,未在附件內上傳外,其余配置文件相見附件!

PS:重點說明一點,隊列名稱/緩存鍵名稱,一定不要始終“-”作為連接符,請使用“_”作為連接符,避免意想不到的錯誤。!


相關鏈接:
征服 Kestrel
征服 Kestrel + XMemcached
征服 Kestrel + XMemcached + Spring TaskExecutor

征服 Kestrel


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論