消息队列RocketMQ并发量⼗万级
⼗年河东,⼗年河西,莫欺少年穷
学⽆⽌境,精益求精
前天/昨天,搞了整整两天安装RabbitMQ服务端,都是以失败告终。⼈不能在⼀棵树上吊死,因此,经历不间断的坚持后,果断放弃安装RabbitMQ服务端,转向阿⾥巴巴中间件RocketMQ 。
话说,⽆论从哪⽅⾯说,阿⾥的 RocketMQ 都⽐ RabbitMQ强⼤,毕竟从命名上我们也能看出端倪:兔⼦是⼲不过⽕箭的。
有图为证:
吞吐量⼀个是万,⼀个是⼗万,多了⼀个量级。
其实⽹上有很多关于RocketMQ 服务端的安装配置教程,在此,贴出⼀下资源供⼤家使⽤。
1、
2、
3、
4、踩坑记录
5、
其中第三篇是安装所需要的的资源及扩展插件。
后续:我的RocketMQ采坑记:
1、javaJDK请使⽤java1.8,全名为:,这点很重要,否则你的尝试很可能会失败。
2、⽆论安装Java还是⽤来配置环境变量的⽂件,请放在⼀个没有空格的⽂件夹中,这点很重要。
⽆论你安装RocketMQ 【rocketmq-all-4.2.0-bin-release】、Java1.8,maven-3.6.3、rocketmq-all-4.2.0-bin-release、rocketmq-externals-master 这些⽂件不管是⽤来安装,还是⽤来配置环境变量,请在C盘建⼀个MQ的⽂件夹,把所有⽂件均放在MQ⽂件夹中,上述这些⽂件仅有Java1.8需要安装,也需要安装在MQ⽂件夹下,【例如:安装在:
C:\MQ\Java⽬录下】,其他都是⽤来配置环境变量的。
3、rocketmq-externals-master 这个⽂件是⾮必须的,他的作⽤是配合Java⽣成⼀个Java项⽬,即:rocketmq-console-ng-1.0.0.jar,这个⽂件可以通过⽹上进⾏下载,端⼝号默认是8080.
4、据说还需要安装GIT,因此,不管真假,请安装GIT。
5、资源包下载:
安装配置完毕后,执⾏如下命令:【通过JAVA代理,访问RocketMQ的服务端】
最终的效果图如下:
泣⾎告知,不想采坑,望采纳。
@陈卧龙的博客
转发:
RocketMQ 是⼀款分布式消息中间件,最初是由阿⾥巴巴消息中间件团队研发并⼤规模应⽤于⽣产系统,满⾜线上海量消息堆积的需求,在 2016 年底捐赠给 Apache 开源基⾦会成为孵化项⽬,经过不到⼀年时间正式成为了 Apache 顶级项⽬。
早期阿⾥曾经基于 ActiveMQ 研发消息系统,随着业务消息的规模增⼤,瓶颈逐渐显现,后来也考虑过Kafka,但因为在低延迟和⾼可靠性⽅⾯没有选择,最后才⾃主研发了RocketMQ,各⽅⾯的性能都⽐⽬
前已有的消息队列要好,RocketMQ 和 Kafka 在概念和原理上都⾮常相似,所以也经常被拿来对⽐;RocketMQ 默认采⽤长轮询的拉模式,单机⽀持千万级别的消息堆积,可以⾮常好的应⽤在海量消息系统中。
本⽂分为三部分,如下图所⽰:
1 安装 RocketMQ—Windows 版本
(1)下载 Windows 安装包
Windows 版本下载地址:
下载并解压 rocketmq 安装包。
(2)配置系统环境变量
配置系统变量 ROCKETMQ_HOME=“D:\soft\rocketmq-all-4.5.1-bin-release”,如下图所⽰:
注意:每个⼈ rocketmq 存放⽬录不⼀样,我的在 D:\soft 下,⽤户根据⾃⼰的环境配置相应的系统变量。
因为接下来启动 d 中使⽤到了环境变量 %ROCKETMQ_HOME%,所以这⾥需要配置此系统变量。
(3)启动 namesrv
进⼊ rocketmq 的 bin ⽬录,执⾏d,执⾏成功如下图所⽰:
注意:启动之后,不能关闭此窗⼝。
(4)启动 broker
还是在 bin ⽬录下执⾏d -n 127.0.0.1:9876 autoCreateTopicEnable=true,执⾏成功如下图所⽰:
同样不要关闭以上运⾏窗⼝。
完成以下步骤,说明你的 RocketMQ 已经按照成功了。
2 安装可视化插件
(1)下载插件
打开连接下载可视化插件 rocketmq-externals,如下图所⽰:
点击 Download ZIP 进⾏下载。
我为⼤家准备了国内百度云的下载链接,⽅便⼤家使⽤。
百度链接:
提取码:fuzy
(2)配置插件
下载完成之后,进⼊ rocketmq-externals\rocketmq-console\src\main\resources\application.properties 进⾏配置,如下图所⽰:
其中主要的字段说明如下:
server.port=8066:此可视化插件的运⾏端⼝。
(3)编译插件
进⼊ rocketmq-externals\rocketmq-console ⽂件夹,执⾏mvn clean package -st.skip=true
编译项⽬。
编译成功如下图所⽰:
编译阶段有可能出现以下两个问题,没有到 mvn 命令,或编译超级慢的问题,以下提供解决⽅案。
问题⼀:mvn ⾮可以运⾏的命令active下载
解决⽅案:这是因为没有安装 Maven 或者没有配置 Maven 的环境变量导致的,下载 Maven 安装包,增加环境变量MAVEN_HOME=maven安装⽬录,给 path 中添加%MAVEN_HOME%\bin,重新启动命令⾏⼯具(CMD)重新执⾏命令。
问题⼆:编译超慢的问题
解决⽅案:这是因为使⽤ Maven 数据源为国外源的问题导致的,只需要配置阿⾥的 Maven 源即可。
打开 Maven ⽬录下的 l 给 mirrors 节点下添加如下内容:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>maven.aliyun/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
(4)运⾏插件
编译成功之后,进⼊ target ⽂件夹,执⾏java -jar rocketmq-console-ng-1.0.1.jar启动程序。
启动成功之后,在浏览器输⼊地址进⾏访问,效果如下图:
3 基础使⽤
(1)添加引⽤ jar 包
<!-- mvnrepository/artifact/ketmq/rocketmq-client -->
<dependency>
<groupId>ketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>3.6.2.Final</version>
</dependency>
(2)添加⽣产者和消费者代码
public class RocketMQDemo {
static final String MQ_NAMESRVADDR = "localhost:9876";
public static void main(String[] args) {
// 分组名
String groupName = "myGroup-1";
// 主题名
String topicName = "myTopic-1";
// 标签名
String tagName = "myTag-1";
new Thread(() -> {
try {
producer(groupName, topicName, tagName);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (RemotingException e) {
e.printStackTrace();
} catch (MQClientException e) {
e.printStackTrace();
} catch (MQBrokerException e) {
e.printStackTrace();
}
}).start();
new Thread(() -> {
try {
consumer(groupName, topicName, tagName);
} catch (MQClientException e) {
e.printStackTrace();
}
}).start();
}
/**
* @Description ⽣产者
* @Author wanglei
* @Param [groupName 分组名, topicName 主题名, tagName 标签名]
**/
public static void producer(String groupName, String topicName, String tagName) throws InterruptedException, RemotingException, MQClientException, MQBrokerException {
DefaultMQProducer producer = new DefaultMQProducer(groupName);
producer.setNamesrvAddr(MQ_NAMESRVADDR);
producer.start();
String body = "Hello, ⽼王";
Message message = new Message(topicName, tagName, Bytes());
producer.send(message);
producer.shutdown();
}
/**
* @Description 消费者
* @Author wanglei
* @Param [groupName 分组名, topicName 主题名, tagName 标签名]
**/
public static void consumer(String groupName, String topicName, String tagName) throws MQClientException {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(groupName);
consumer.setNamesrvAddr(MQ_NAMESRVADDR);
consumer.subscribe(topicName, tagName);
public ConsumeConcurrentlyStatus consumeMessage(
List<MessageExt> msgs, ConsumeConcurrentlyContext context) {                for (MessageExt msg : msgs) {
System.out.println(new Body()));
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
}
}
以上程序执⾏结果如下:
Hello, ⽼王

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。