RocketMQ专题

1、安装RocketMQ

环境要求

Linux 64位操作系统
64bit JDK 1.8+

1.1下载

http://rocketmq.apache.org/release_notes/release-notes-4.4.0/

1.2 安装RocketMQ

解压完以后可以移动到/usr/local/
mv rocketmq-all-4.4.0-bin-release /usr/local/rocketmq

1.3 启动RocketMQ

由于个人阿里云内存不大,编辑bin/runbroker.sh 和 bin/runserver.sh文件,修改里面的

#JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
#为JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

bin目录下
启动NameServer nohup ./mqnamesrv &
启动Broker nohup ./mqbroker -n localhost:9876 &

注意两个问题

内网ip
(1)描述
172.16.74.201是阿里云的内网ip,这样启动的话,外网是访问不到的,我电脑去访问的话,会报如下错误:
Exception in thread “main”
org.apache.rocketmq.remoting.exception.RemotingConnectException:
connect to <172.16.74.201:10911> failed
(2)解决
修改conf下的配置文件broker.conf,并修改启动命令

vim conf/broker.conf
在这里插入图片描述
马赛克掉的ip就是阿里云的外网IP。
修改后执行启动命令:

nohup sh bin/mqbroker -c conf/broker.conf &

producer启动后,报异常
(1)描述

Exception in thread "main" org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <47.*.*.134:10909> failed

(2)解决

关闭vip通道:producer.setVipChannelEnabled(false);

1.3 测试RocketMQ

1 测试消息发送

export NAMESRV_ADDR=localhost:9876
./tools.sh org.apache.rocketmq.example.quickstart.Producer

2 测试消息接收

export NAMESRV_ADDR=localhost:9876
./tools.sh org.apache.rocketmq.example.quickstart.Consumer

1.4 关闭RocketMQ

./mqshutdown broker
./mqshutdown namesrv

1.5 RocketMQ控制台安装

1 下载
在git上下载下面的工程 rocketmq-console-1.0.0
https://github.com/apache/rocketmq-externals/releases

2 修改配置文件

修改配置文件 rocketmq-console\src\main\resources\application.properties
#项目启动后的端口号
server.port=7777
#nameserv的地址,注意防火墙要开启 9876端口
rocketmq.config.namesrvAddr=ip:9876

3 打成jar包,并启动

mvn clean package -Dmaven.test.skip=true
4. 启动控制台
java -jar rocketmq-console-ng-1.0.0.jar &

http://localhost:7777
在这里插入图片描述

2.RocketMQ的架构及概念

在这里插入图片描述
如上图所示,整体可以分成4个角色,分别是:NameServer,Broker,Producer,Consumer。

Broker(邮递员)
Broker是RocketMQ的核心,负责消息的接收,存储,投递等功能

NameServer(邮局)
消息队列的协调者,Broker向它注册路由信息,同时Producer和Consumer向其获取路由信息

Producer(寄件人)
消息的生产者,需要从NameServer获取Broker信息,然后与Broker建立连接,向Broker发送消
息

Consumer(收件人)
消息的消费者,需要从NameServer获取Broker信息,然后与Broker建立连接,从Broker获取消
息

Topic(地区)
用来区分不同类型的消息,发送和接收消息前都需要先创建Topic,针对Topic来发送和接收消息

Message Queue(邮件)

为了提高性能和吞吐量,引入了Message Queue,一个Topic可以设置一个或多个Message
Queue,这样消息就可以并行往各个Message Queue发送消息,消费者也可以并行的从多个
Message Queue读取消息

Message
Message 是消息的载体。
Producer Group
生产者组,简单来说就是多个发送同一类消息的生产者称之为一个生产者组。
Consumer Group
消费者组,消费同一类消息的多个 consumer 实例组成一个消费者组。

3.发送不同类型的消息

RocketMQ提供三种方式来发送普通消息:可靠同步发送、可靠异步发送和单向发送。

1.普通消息

可靠同步发送

同步发送是指消息发送方发出数据后,会在收到接收方发回响应之后才发下一个数据包的通讯方
式。
此种方式应用场景非常广泛,例如重要通知邮件、报名短信通知、营销短信系统等。

可靠异步发送

异步发送是指发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。发送
方通过回调接口接收服务器响应,并对响应结果进行处理。
异步发送一般用于链路耗时较长,对 RT 响应时间较为敏感的业务场景,例如用户视频上传后通知
启动转码服务,转码完成后通知推送转码结果等。

单向发送

单向发送是指发送方只负责发送消息,不等待服务器回应且没有回调函数触发,即只发送请求不
等待应答。
适用于某些耗时非常短,但对可靠性要求并不高的场景,例如日志收集。

三种发送方式的对比
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200531170807215.png

2.顺序消息

上面的消息是不保证顺序性的。因为他们会发往不同的队列,如果要保证顺序性,要制定好队列。

3 事务消息

RocketMQ提供了事务消息,通过事务消息就能达到分布式事务的最终一致。

事务消息交互流程:
在这里插入图片描述
两个概念:

半事务消息:暂不能投递的消息,发送方已经成功地将消息发送到了RocketMQ服务端,但是服务
端未收到生产者对该消息的二次确认,此时该消息被标记成“暂不能投递”状态,处于该种状态下的
消息即半事务消息。

消息回查:由于网络闪断、生产者应用重启等原因,导致某条事务消息的二次确认丢失,
RocketMQ服务端通过扫描发现某条消息长期处于“半事务消息”时,需要主动向消息生产者询问该
消息的最终状态(Commit 或是 Rollback),该询问过程即消息回查。

事务消息发送步骤:

发送方将半事务消息发送至RocketMQ服务端。
RocketMQ服务端将消息持久化之后,向发送方返回Ack确认消息已经发送成功,此时消息为半事
务消息。
发送方开始执行本地事务逻辑。
发送方根据本地事务执行结果向服务端提交二次确认(Commit 或是 Rollback),服务端收到
Commit 状态则将半事务消息标记为可投递,订阅方最终将收到该消息;服务端收到 Rollback 状
态则删除半事务消息,订阅方将不会接受该消息。

事务消息回查步骤:

在断网或者是应用重启的特殊情况下,上述步骤4提交的二次确认最终未到达服务端,经过固定时
间后服务端将对该消息发起消息回查。
发送方收到消息回查后,需要检查对应消息的本地事务执行的最终结果。
发送方根据检查得到的本地事务的最终状态再次提交二次确认,服务端仍按照步骤4对半事务消息
进行操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值