ps: github과 code cloud에 소스코드 복사본이 2개 있기 때문에 최신 코드는 주로 github에 있습니다.
git clone https://github.com/mpusher/mpush.git
mpush-test
모듈을 엽니다. 모든 테스트 코드는 이 모듈 아래에 있습니다.src/test/resource/application.conf
서비스 배포 6번 항목을 참고하세요.com.mpush.test.sever.ServerTestMain.java
실행하여 긴 링크 서비스를 시작합니다.com.mpush.test.client.ConnClientTestMain.java
실행하여 클라이언트 시뮬레이션com.mpush.test.push.PushClientTestMain
실행하여 사용자에게 메시지 보내기를 시뮬레이션합니다. jdk 1.8
이상 설치 및 %JAVA_HOME%
설정
zookeeper
설치(설치 및 구성 단계는 생략됨)
Redis
설치(설치 및 구성 단계 생략)
mpush 서버 https://github.com/mpusher/mpush/releases의 최신 공식 패키지를 다운로드하세요.
다운로드한 tar 패키지 tar -zvxf mpush-release-0.0.2.tar.gz
mpush 디렉터리에 압축을 풉니다. 구조는 다음과 같습니다.
drwxrwxr-x 2 샤인모 샤인모 4096 8월 20일 09:30 bin —> 시작 스크립트 drwxrwxr-x 2 샤인모 샤인모 4096 8월 20일 09:52 conf —> 구성 파일 drwxrwxr-x 2 샤인모 샤인모 4096 8월 20일 09:29 lib —> 핵심 클래스 라이브러리-rw-rw-r-- 1 Shinemo Shinemo 11357 5월 31일 11:07 라이센스 drwxrwxr-x 2 샤인모 샤인모 4096 8월 20일 09:32 로그 —> 로그 디렉토리-rw-rw-r-- 1 샤인모 샤인모 21 5월 31일 11:07 README.md drwxrwxr-x 2 샤인모 샤인모 4096 8월 20일 09:52 tmp
conf 디렉토리에 있는 vi mpush.conf
파일을 수정하십시오. mpush.conf
의 구성 항목은 동일한 디렉토리에 있는 reference.conf
파일을 덮어씁니다.
#主要修改以下配置
mp . net . connect - server - port = 3000 //长链接服务对外端口, 公网端口
mp . zk . server - address = "127.0.0.1:2181" //zk 机器的地址
mp . redis ={ //redis 相关配置
nodes :[ "127.0.0.1:6379" ] //格式是ip:port
cluster - model : single //single, cluster
}
//还有用于安全加密的RSA mp.security.private-key 和 mp.security.public-key 等...
다른 구성을 수정하려면 reference.conf 파일을 참조하세요.
bin 디렉터리 chmod u+x *.sh
의 스크립트에 실행 권한을 추가합니다.
./mp.sh start
실행하여 서비스를 시작하고 도움말을 확인하세요 ./mp.sh
가 현재 지원하는 명령은 다음과 같습니다.
Usage: ./mp.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}
set-env.sh
는 힙 메모리, 원격 디버깅 포트 열기, jmx 열기 등과 같은 jvm 시작 매개변수를 추가하고 수정하는 데 사용됩니다.
cd logs
디렉토리, cat mpush.out
서비스가 성공적으로 시작되었는지 확인
기존 웹 프로젝트에 통합하고 Tomcat에 배포하는 등의 통합 배포에는 다음 종속성을 추가할 수 있습니다.
< dependency >
< groupId >com.github.mpusher</ groupId >
< artifactId >mpush-boot</ artifactId >
< version >0.0.2</ version >
</ dependency >
시작 항목 com.mpush.bootstrap.ServerLauncher.java
##################################################################################################################
#
# NOTICE :
#
# 系统配置文件,所有列出的项是系统所支持全部配置项
# 如果要覆盖某项的值可以添加到mpush . conf中。
#
# 配置文件格式采用HOCON格式。解析库由https : //github.com/typesafehub/config提供。
# 具体可参照说明文档,比如含有特殊字符的字符串必须用双引号包起来。
#
##################################################################################################################
mp {
#基础配置
home = $ { user . dir } //程序工作目录
#日志配置
log - level = warn
log - dir = $ { mp . home }/ logs
log - conf - path = $ { mp . home }/ conf / logback . xml
#核心配置
core {
max - packet - size = 10 k //系统允许传输的最大包的大小
compress - threshold = 10 k //数据包启用压缩的临界值,超过该值后对数据进行压缩
min - heartbeat = 3 m //最小心跳间隔
max - heartbeat = 3 m //最大心跳间隔
max - hb - timeout - times = 2 //允许的心跳连续超时的最大次数
session - expired - time = 1d //用于快速重连的session 过期时间默认1天
epoll - provider = netty //nio:jdk自带,netty:由netty实现
}
#安全配置
security {
# rsa 私钥、公钥key长度为1024 ;可以使用脚本bin / rsa . sh生成, @ see com . mpush . tools . crypto . RSAUtils # main
private - key = "MIIBNgIBADANBgkqhkiG9w0BAQEFAASCASAwggEcAgEAAoGBAKCE8JYKhsbydMPbiO7BJVq1pbuJWJHFxOR7L8Hv3ZVkSG4eNC8DdwAmDHYu/wadfw0ihKFm2gKDcLHp5yz5UQ8PZ8FyDYvgkrvGV0ak4nc40QDJWws621dm01e/INlGKOIStAAsxOityCLv0zm5Vf3+My/YaBvZcB5mGUsPbx8fAgEAAoGAAy0+WanRqwRHXUzt89OsupPXuNNqBlCEqgTqGAt4Nimq6Ur9u2R1KXKXUotxjp71Ubw6JbuUWvJg+5Rmd9RjT0HOUEQF3rvzEepKtaraPhV5ejEIrB+nJWNfGye4yzLdfEXJBGUQzrG+wNe13izfRNXI4dN/6Q5npzqaqv0E1CkCAQACAQACAQACAQACAQA="
public - key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCghPCWCobG8nTD24juwSVataW7iViRxcTkey/B792VZEhuHjQvA3cAJgx2Lv8GnX8NIoShZtoCg3Cx6ecs+VEPD2fBcg2L4JK7xldGpOJ3ONEAyVsLOttXZtNXvyDZRijiErQALMTorcgi79M5uVX9/jMv2Ggb2XAeZhlLD28fHwIDAQAB"
aes - key - length = 16 //AES key 长度
}
#网络配置
net {
local - ip = "" //本地ip, 默认取第一个网卡的本地IP
public - ip = "" //外网ip, 默认取第一个网卡的外网IP
connect - server - bind - ip = "" //connSrv 绑定的本地ip (默认anyLocalAddress 0.0.0.0 or ::0)
connect - server - register - ip = $ { mp . net . public - ip } //公网ip, 注册到zk中的ip, 默认是public-ip
connect - server - port = 3000 //长链接服务对外端口, 公网端口
connect - server - register - attr { //注册到zk里的额外属性,比如配置权重,可在alloc里排序
weight : 1
}
gateway - server - bind - ip = "" //gatewaySrv 绑定的本地ip (默认anyLocalAddress 0.0.0.0 or ::0)
gateway - server - register - ip = $ { mp . net . local - ip } //本地ip, 注册到zk中的ip, 默认是local-ip
gateway - server - port = 3001 //网关服务端口, 内部端口
gateway - server - net = tcp //网关服务使用的网络类型tcp/udp/sctp/udt
gateway - client - port = 4000 //UDP 客户端端口
gateway - server - multicast = "239.239.239.88" //239.0.0.0~239.255.255.255为本地管理组播地址,仅在特定的本地范围内有效
gateway - client - multicast = "239.239.239.99" //239.0.0.0~239.255.255.255为本地管理组播地址,仅在特定的本地范围内有效
gateway - client - num = 1 //网关客户端连接数
admin - server - port = 3002 //控制台服务端口, 内部端口
ws - server - port = 0 //websocket对外端口, 公网端口, 0表示禁用websocket
ws - path = "/" //websocket path
public - host - mapping { //本机局域网IP和公网IP的映射关系, 该配置后续会被废弃
//"10.0.10.156":"111.1.32.137"
//"10.0.10.166":"111.1.33.138"
}
snd_buf { //tcp/udp 发送缓冲区大小
connect - server = 32 k
gateway - server = 0
gateway - client = 0 //0表示使用操作系统默认值
}
rcv_buf { //tcp/udp 接收缓冲区大小
connect - server = 32 k
gateway - server = 0
gateway - client = 0 //0表示使用操作系统默认值
}
write - buffer - water - mark { //netty 写保护
connect - server - low = 32 k
connect - server - high = 64 k
gateway - server - low = 10 m
gateway - server - high = 20 m
}
traffic - shaping { //流量整形配置
gateway - client {
enabled : false
check - interval : 100 ms
write - global - limit : 30 k
read - global - limit : 0
write - channel - limit : 3 k
read - channel - limit : 0
}
gateway - server {
enabled : false
check - interval : 100 ms
write - global - limit : 0
read - global - limit : 30 k
write - channel - limit : 0
read - channel - limit : 3 k
}
connect - server {
enabled : false
check - interval : 100 ms
write - global - limit : 0
read - global - limit : 100 k
write - channel - limit : 3 k
read - channel - limit : 3 k
}
}
}
# Zookeeper配置
zk {
server - address = "127.0.0.1:2181" //多台机器使用","分隔如:"10.0.10.44:2181,10.0.10.49:2181" @see org.apache.zookeeper.ZooKeeper#ZooKeeper()
namespace = mpush
digest = mpush //zkCli.sh acl 命令 addauth digest mpush
watch - path =/
retry {
# initial amount of time to wait between retries
baseSleepTimeMs = 3 s
# max number of times to retry
maxRetries = 3
# max time in ms to sleep on each retry
maxSleepMs = 5 s
}
connectionTimeoutMs = 5 s
sessionTimeoutMs = 5 s
}
# Redis集群配置
redis {
cluster - model = single //single,cluster,sentinel
sentinel - master :""
nodes :[] s //["127.0.0.1:6379"]格式ip:port
password ="" //your password
config {
maxTotal : 8 ,
maxIdle : 4 ,
minIdle : 1 ,
lifo : true ,
fairness : false ,
maxWaitMillis : 5000 ,
minEvictableIdleTimeMillis : 300000 ,
softMinEvictableIdleTimeMillis : 1800000 ,
numTestsPerEvictionRun : 3 ,
testOnCreate : false ,
testOnBorrow : false ,
testOnReturn : false ,
testWhileIdle : false ,
timeBetweenEvictionRunsMillis : 60000 ,
blockWhenExhausted : true ,
jmxEnabled : false ,
jmxNamePrefix : pool ,
jmxNameBase : pool
}
}
# HTTP代理配置
http {
proxy - enabled = false //启用Http代理
max - conn - per - host = 5 //每个域名的最大链接数, 建议web服务nginx超时时间设长一点, 以便保持长链接
default - read - timeout = 10 s //请求超时时间
max - content - length = 5 m //response body 最大大小
dns - mapping { //域名映射外网地址转内部IP, 域名部分不包含端口号
//"mpush.com":["127.0.0.1:8080", "127.0.0.1:8081"]
}
}
#线程池配置
thread {
pool {
conn - work : 0 //接入服务线程池大小,0表示线程数根据cpu核数动态调整(2*cpu)
gateway - server - work : 0 //网关服务线程池大小,0表示线程数根据cpu核数动态调整(2*cpu)
http - work : 0 //http proxy netty client work pool size,0表示线程数根据cpu核数动态调整(2*cpu)
ack - timer : 1 //处理ACK消息超时
push - task : 0 //消息推送中心,推送任务线程池大小, 如果为0表示使用Gateway Server的work线程池,tcp下推荐0
gateway - client - work : 0 //网关客户端线程池大小,0表示线程数根据cpu核数动态调整(2*cpu),该线程池在客户端运行
push - client : 2 //消息推送回调处理,该线程池在客户端运行
event - bus { //用户处理内部事件分发
min : 1
max : 16
queue - size : 10000 //大量的online,offline
}
mq { //用户上下线消息, 踢人等
min : 1
max : 4
queue - size : 10000
}
}
}
#推送消息流控
push {
flow - control { //qps = limit/(duration)
global :{ //针对非广播推送的流控,全局有效
limit : 5000 //qps = 5000
max : 0 //UN limit
duration : 1 s //1s
}
broadcast :{ //针对广播消息的流控,单次任务有效
limit : 3000 //qps = 3000
max : 100000 //10w
duration : 1 s //1s
}
}
}
#系统监控配置
monitor {
dump - dir = $ { mp . home }/ tmp
dump - stack = false //是否定时dump堆栈
dump - period = 1 m //多久监控一次
print - log = true //是否打印监控日志
profile - enabled = false //开启性能监控
profile - slowly - duration = 10 ms //耗时超过10ms打印日志
}
# SPI扩展配置
spi {
thread - pool - factory : "com.mpush.tools.thread.pool.DefaultThreadPoolFactory"
dns - mapping - manager : "com.mpush.common.net.HttpProxyDnsMappingManager"
}
}