RocketMQ

本文档主要是rocketmq实际代码使用,常见词语介绍等查看其他文档

http://rocketmq.apache.org/release_notes/release-notes-4.3.2/二进制文件下载地址,下载后可以直接解压运行

https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.3.2/rocketmq-all-4.3.2-source-release.zip源码方式下载地址,下载后需要自己打包

进入rocketmq的本目录

nohup sh mqnamesrv,

进入本目录

nohup sh mqbroker - n localhost: 9876 autoCreateTopicEnable=true,
集群方式参考集群配置文件 rocketmq 集群

默认情况下,我们的服务器都是单独的独立服务器,不会出现这种情况,但是我们在测试过程中使用的是虚拟机,配置不够,会导致无法启动

修改runbroker。sh和runserver。sh

分别找到下图中的指示位置

修改内存大小即可,大小请自己按照自己虚拟机的配置适当调整,比如我修改为了以下值







此处非必须,实际开发中使用较少

下载 rocketmq-console 源码:https://github.com/apache/rocketmq-externals

进入子目录 rocketmq-console

执行 mvn 命令打包

mvn清洁包-DskipTests

进入 目标目录

rocketmq-console-ng-1.0.0。jar 即为 springBoot 项目

在该目录下 CMD 执行命令:

java jar rocketmq-console-ng-1.0.0。jar——服务器。端口=12581——rocketmq.config.namesrvAddr=10.89.0.65:9876
其中
——server.port 为运行的这个 web 应用的端口,如果不设置的话默认为 8080 , ——rocketmq.config.namesrvAddr RocketMQ 命名服务地址,如果不设置的话默认为 "
了,访问下 http://localhost: 12581 试试吧。

或者打包成 战争包扔到tomcat 中运行

此案例中使用的是一个消费者,所以消费者代码只有一个





表示。rocketmq
rocketmq-client
4.3.2


原理:同步发送是指消息发送方发出数据后,会在收到接收方发回响应之后才发下一个数据包的通讯方式。

应用场景:此种方式应用场景非常广泛,例如重要通知邮件、报名短信通知、营销短信系统等。





Created by jackiechan>RocketMQ




Created by jackiechan>RocketMQ




Created by jackiechan>RocketMQ


但是如果第一条被发送到消费者后,消费者没有响应(消费者发送响应但是因为网络问题丢失或者消费者就没有收到消息),那么在这种情况下你是继续发送第二条还是重发第一条呢?如果是严格消息顺序,那肯定是重发第一条,但是如果是消费者消费后的响应丢失了,那么重发第一条就会造成重复消费。

从另外一方面看,如果不考虑网络异常,那么要实现严格消息,就必须采取一种一对一关系,生产者A的消息对应到MQ服务器1的X队列,消费者A消费X队列。这样串行结构就会造成系统吞吐量太低;更多异常需要处理比如消费端出现问题,那么整个消息队列就会出现阻塞。RocketMQ通过轮询所有队列来确定消息发送到哪一个队列(负载均衡),比如相同订单号的消息会被先后发送到统一队列中。所以RocketMQ

消息重复

造成消费重复的根本原因是网络不可达,只要有网络,这种网络的不稳定因素就存在你无法规避。所以解决这个问题的最好办法就是绕过它。这就变成了,消费端收到两个一样的消息后如何处理,而不是从发送端解决不发送2个一样的消息。对于消费端的要求就是:

  • 消费端处理业务消息要保持幂等性,也就是同一个东西执行多次会得到相同结果

    RocketMQ