就我个人目前理解,对于分布式事务目前大概有两种类型,①单个应用多个库,可以利用JTS及各个数据库的接口来实现;②多个应用多个,只能利用中间件来完成分布式事务,中间件充当事务管理器角色。
调研了多种MQ,决定采用阿里的RocketMQ来作为中间件。因为RocketMQ文档资料比较多,而且做集群方案的时候不需要引入第三方注册中心来做集群管理和负载均衡,RocketMQ可以保证严格的消息顺序,丰富的消息拉取模式(Push or Pull)
首先,我们需要安装配置rocketMQ:
1.下载安装rocketMQ
访问官网https://rocketmq.apache.org 下载rocketMQ。
第一个here链接是下载的源码版本,下面的那些命令是编译安装MQ的,这里我选择直接下载编译好的二进制文件。
下载完成后,解压后文件目录如下:
单节点的配置一下jvm的内存信息就可以了,内存配置跟双master的一样,在windows下依次直接点击mqnamesvr.cmd与mqbroker.cmd就可以启动了。这里主要说一下双master,双master会了其他的都大同小异。
进入解压目录里的bin目录,编辑runserver.sh 和runbroker.sh 文件
JVM内存配置如下:
#===========================================================================================
# JVM Configuration
#===========================================================================================
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx1g -Xmn1g"
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/mq_gc_%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy"
JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch"
JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=15g"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
runserver.sh 和runbroker.sh两个都用这个配置。
如果启动还是有问题的话可能还需要配置下 runserver.xml 和runbroker.xml
类似这样