消息队列 RocketMQ 并发量十万级
发布日期:2021-05-09 01:18:06 浏览次数:12 分类:博客文章

本文共 5463 字,大约阅读时间需要 18 分钟。

十年河东,十年河西,莫欺少年穷

学无止境,精益求精

前天/昨天,搞了整整两天安装RabbitMQ服务端,都是以失败告终。人不能在一棵树上吊死,因此,经历不间断的坚持后,果断放弃安装RabbitMQ服务端,转向阿里巴巴中间件 RocketMQ 。

话说,无论从哪方面说,阿里的 RocketMQ 都比 RabbitMQ强大,毕竟从命名上我们也能看出端倪:兔子是干不过火箭的。

 

有图为证:

 

 吞吐量一个是万,一个是十万,多了一个量级。

其实网上有很多关于RocketMQ 服务端的安装配置教程,在此,贴出一下资源供大家使用。

1、

2、

3、

4、  踩坑记录  

5、

其中第三篇是安装 所需要的的资源及扩展插件。

后续:我的RocketMQ采坑记:

1、javaJDK请使用java1.8,全名为:jdk-8u40-windows-x64.exe,这点很重要,否则你的尝试很可能会失败。

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 下,用户根据自己的环境配置相应的系统变量。

因为接下来启动 mqnamesrv.cmd 中使用到了环境变量 %ROCKETMQ_HOME%,所以这里需要配置此系统变量。

(3)启动 namesrv

进入 rocketmq 的 bin 目录,执行 start mqnamesrv.cmd ,执行成功如下图所示:

注意:启动之后,不能关闭此窗口。

(4)启动 broker

还是在 bin 目录下执行 start mqbroker.cmd -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:此可视化插件的运行端口。
  • rocketmq.config.namesrvAddr=127.0.0.1:9876:rocketmq 的链接信息。

(3)编译插件

进入 rocketmq-externals\rocketmq-console 文件夹,执行 mvn clean package -Dmaven.test.skip=true

 编译项目。
编译成功如下图所示:
编译阶段有可能出现以下两个问题,没有找到 mvn 命令,或编译超级慢的问题,以下提供解决方案。

问题一:mvn 非可以运行的命令

解决方案:这是因为没有安装 Maven 或者没有配置 Maven 的环境变量导致的,下载 Maven 安装包,增加环境变量 MAVEN_HOME=maven安装目录  ,给 path 中添加 %MAVEN_HOME%\bin ,重新启动命令行工具(CMD)重新执行命令。

问题二:编译超慢的问题

解决方案:这是因为使用 Maven 数据源为国外源的问题导致的,只需要配置阿里的 Maven 源即可。

打开 Maven 目录下的 conf/setting.xml 给 mirrors 节点下添加如下内容:

alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central

(4)运行插件

编译成功之后,进入 target 文件夹,执行 java -jar rocketmq-console-ng-1.0.1.jar 启动程序。

启动成功之后,在浏览器输入地址  进行访问,效果如下图:

3 基础使用

(1)添加引用 jar 包

pom.xml 添加以下代码:

com.alibaba.rocketmq
rocketmq-client
3.6.2.Final

(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, body.getBytes());        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);        consumer.registerMessageListener(new MessageListenerConcurrently() {            @Override            public ConsumeConcurrentlyStatus consumeMessage(                    List
msgs, ConsumeConcurrentlyContext context) { for (MessageExt msg : msgs) { System.out.println(new String(msg.getBody())); } return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; } }); consumer.start(); }}

以上程序执行结果如下:

Hello, 老王

 

上一篇:C#代码实现阿里云消息服务MNS消息监听
下一篇:Redis 的基础数据类型

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年03月24日 17时04分43秒