内容简介:消息队列作为高并发系统的核心组件之一,能够帮助业务系统解构提升开发效率和系统稳定性。官网:http://rocketmq.apache.org/
消息队列作为高并发系统的核心组件之一,能够帮助业务系统解构提升开发效率和系统稳定性。
(一)rocketMQ
官网:http://rocketmq.apache.org/
开源的分布式消息和流处理,流处理这块原来只有kafka这样说,因为rocketMq本身做的也比较好,它也加上了kafka这句话,意思我也很强。
Github:https://github.com/apache/rocketmq/
目前最新的版本是4.5.0
Github:https://github.com/alibaba
这里已经找不到rocketMq了,因为已经捐献给apache了,之前的很多资料官方都不提供了,唯一有的就是上边rocketMq的官网。
- 开发的动机
在早期阶段,我们构建了基于ActiveMQ5.x(早于5.3)的分布式消息中间件。我们的跨国企业使用它进行异步通信、搜索、社交网络活动流、数据管道,甚至在其程中。随着我们的业务吞吐量增加,来自我们的消息传递集群的压力也变得紧迫。
- 为什么开发RocketMQ
基于我们的研究,随着队列的增加和虚拟主题的使用,ActiveMQ IO模块遇到了瓶颈。我们尽力通过节流、路由或降级来解决这个问题,但效果并不好。所以我们开始关注流行的消息传递解决方案Kafka。不幸的是,Kafka不能满足我们的要求,特别是在低延迟和高可靠性方面。在这种情况下,我们决定发明一个新的消息传递引擎来处理更广泛的用例集,从传统的pub/sub场景到大容量的实时零损失容忍事务系统。我们相信这个解决方案是有益的,所以我们希望向社区开放源代码。
- 下载rocketmq源码
| 名称 | 作用 |
|---|---|
| acl | 权限控制 |
| broker | broker模块:c和p端消息存储逻辑 |
| client | 客户端api:produce、consumer端 接受与发送api |
| common | 公共组件:常量、基类、数据结构 |
| tools | 运维tools:命令行 工具 模块 |
| store | 存储模块:消息、索引、commitlog存储 |
| namesrv | 服务管理模块:服务注册topic等信息存储 |
| remoting | 远程通讯模块:netty+fastjson |
| logappender | 日志适配模块 |
| example | Demo列子 |
| filtersrv | 消息过滤器模块 |
| srvutil | 辅助模块 |
| filter | 过滤模块:消息过滤模块 |
| distribution | 部署、运维相关zip包中的代码 |
| openmessaging | 兼容openmessaging分布式消息模块 |
(二)rocketmq环境搭建
(一)安装虚拟机
源码:https://github.com/limingios/netFuture/tree/master/jms,可以查看,之前的文章,vagrant的介绍docker【中级】。
-
环境
>192.168.89.100
>192.168.89.101
>每台服务器1主1从,2M-2S-SYNC(两主两从同步写)
相关安装包存储路径:/root/soft/
| 系统类型 | IP地址 | 节点角色 | CPU | Memory | Hostname |
|---|---|---|---|---|---|
| Centos7 | 192.168.89.100 | rocketmq-master-1 | 1 | 4G | redis-master-1 |
| Centos7 | 192.168.89.101 | rocketmq-master-2 | 1 | 4G | redis-master-2 |
- 下载
89.100主机
Apache: http://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.2.0/rocketmq-all-4.2.0-bin-release.zip
wget http://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.2.0/rocketmq-all-4.2.0-bin-release.zip yum -y install unzip unzip rocketmq-all-4.2.0-bin-release.zip -d /root/rocketmq
安装JDK 新的版本要求JDK1.8以上的
192.168.89.100 和192.168.89.101都要安装
源码:jms目录下的pro.sh
#通过vi 直接复制进去也可以 #但是一定要记住增加权限 chmod 777 pro.sh ./pro.sh
# @Author: liming
# @Date: 2018-11-26 23:14:59
# @Last Modified by: liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 个人公众号 编程坑太多
#!/bin/bash
SOFT_PATH=/opt/soft
if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夹已经存在"
fi
yum install -y wget
#install jdk1.8
cd $SOFT_PATH
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd`
#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`
#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git
#追加环境变量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#输出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
再次更新环境变量
192.168.89.100 和192.168.89.101都要
source /etc/profile
配置host
192.168.89.100 和192.168.89.101都要
vi /etc/hosts
192.168.89.100 rocketmq1 192.168.89.101 rocketmq2
配置环境变量
192.168.89.100 和192.168.89.101都要
echo "export ROCKETMQ_HOME=/root/rocketmq" >> /etc/profile echo "export PATH=$PATH::$ROCKETMQ_HOME/bin" >> /etc/profile source /etc/profile
192.168.89.100 进行配置
cd /root/rocketmq/conf/2m-2s-sync ll
192.168.89.100配置
源码:包中jms 里面配置好了2m-2s-sync
直接覆盖就可以了。具体配置下面会说。按照文件名
yum -y install lrzsz rz -y
192.168.89.100创建存储&日志文件
mkdir /root/rocketmq/data
mkdir /root/rocketmq/data/store
mkdir /root/rocketmq/data/store/commitlog
mkdir /root/rocketmq/data/store/consumequeue
mkdir /root/rocketmq/data/store/index
mkdir /root/rocketmq/data/store-slave
mkdir /root/rocketmq/data/store-slave/index
mkdir /root/rocketmq/data/store-slave/commitlog
mkdir /root/rocketmq/data/store-slave/consumequeue
mkdir -p /root/rocketmq/logs
cd /root/rocketmq/conf && sed -i 's#${user.home}#/root/rocketmq#g' *.xml
192.168.89.100改参数
runbroker.sh,runserver.sh启动参数默认对jvm的堆内存设置比较大(不改启动不起来),如果是虚拟机非线上环境需要改下参数
cd /root/rocketmq/bin vi runbroker.sh vi runserver.sh
#默认大小
-Xms8g -Xmx8g -Xmn4g
改为:
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"
cd /root/rocketmq/bin vi runserver.sh
vi runbroker.sh
192.168.89.100复制到192.168.89.101
cd /root/ scp -r rocketmq/ root@192.168.89.101:/root/
192.168.89.100和192.168.89.101
增加权限
cd /root/rocketmq/bin chmod 777 *
192.168.89.100启动Nameserver服务 和 BrokerServer服务
cd /root/rocketmq/bin sh mqnamesrv & sh mqbroker -c /root/rocketmq/conf/2m-2s-sync/broker-a.properties & sh mqbroker -c /root/rocketmq/conf/2m-2s-sync/broker-b-s.properties &
192.168.89.101启动Nameserver服务 和 BrokerServer服务
cd /root/rocketmq/bin sh mqnamesrv & sh mqbroker -c /root/rocketmq/conf/2m-2s-sync/broker-b.properties & sh mqbroker -c /root/rocketmq/conf/2m-2s-sync/broker-a-s.properties &
测试查看集群
sh mqadmin clusterlist -n 192.168.89.100:9876
测试发送
export NAMESRV_ADDR='rocketmq1:9876;rocketmq2:9876' #测试发送端 sh /root/rocketmq/bin/tools.sh org.apache.rocketmq.example.quickstart.Producer #测试消费端 sh /root/rocketmq/bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
服务停止
cd /root/rocketmq/bin sh mqshutdown broker sh mqshutdown namesrv #或者直接jps,然后kill -9 进程ID
PS:终于安装成功了,2主2从。下一节说说细节和如何测试rocketmq。特别注意的是在broker的properties文件我都在源码上传的。但是里面有个属性一定要注意:默认不配置brokerIP1和brokerIP2时,都会根据当前网卡选择一个IP使用,当你的机器有多块网卡时,很有可能会有问题。brokerIP1一定要填写IP不要填写别名。否则 java 连接就会出现RemotingTooMuchRequestException: sendDefaultImpl call timeout;
>>原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
>>原文链接地址:上一篇:已是最新文章
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Canal 高可用架构部署
- 『互联网架构』软件架构-tomcat之环境部署(下)(22)
- 青云 Region 架构:支持多可用区部署的多活架构
- Serverless架构开发与SCF部署
- 谈谈 Tomcat 架构及启动过程[含部署]
- Serverless架构开发与SCF部署实践
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Chinese Authoritarianism in the Information Age
Routledge / 2018-2-13 / GBP 115.00
This book examines information and public opinion control by the authoritarian state in response to popular access to information and upgraded political communication channels among the citizens in co......一起来看看 《Chinese Authoritarianism in the Information Age》 这本书的介绍吧!