1、什么是MQ
mq是消息中间件,最简单的理解就是A服务发送一条消息给B服务,B服务收到消息后做一系列的动作
这个能解决什么问题呢
- 削峰,服务之间如果通过接口调用的话,无论是http还是rpc,但是属于同步的动作,意味着会存在大量的数据同一时刻到被调用服务,而使用mq完美解决该问题
- 解耦,服务之间数据交互不再通过mysql,redis等,实现服务之间的解耦
2、什么情况会用到mq呢?
服务之间有数据交互时,但不要求时效性
比如:
- 电商场景中,订单系统生成订单后会通知仓库生成出库单,会通知配送系统生成配送单,而这种场景为什么不用rpc或者http接口呢,因为http接口会存在调用失败导致数据丢失,rpc也存在同样的问题,第2个原因,某一时刻大量订单生成时,极有可能导致仓库服务或者配送服务被打挂。
- 日志服务,线上多台服务器会把日志保存到统一日志服务上,方便查看线上日志,这种场景也是非常适合使用mq
3、为什么测试同学需要掌握这个技能
在服务拆分的现在,大量的微服务场景出现,大量使用mq的场景,如果不进行相应的专项测试,大概率会出现线上问题。
4、mq的架构是什么样的?
生产者发送消息给topic(broker),broker再把消息发送给消费者 每个消费者都有1个offset(偏移位),作用是记录这个消息是否被消费过,防止重复消费
最重要的是幂等问题,当网络出现问题的时,broker同样的消息可能会给消费者发送多次
5、如何搭建本地rocketMQ
1、下载rocketMQ并解压 rocketmq.apache.org/release_not…
2、启动nameserver
sh mqnamesrv
3、启动broker
sh bin/mqbroker -n localhost:9876
4、使用自带工具测试
export NAMESRV_ADDR=localhost:9876
sh tools.sh org.apache.rocketmq.example.quickstart.Producer
SendResult [sendStatus=SEND_OK, msgId=C0A80064502A355DA2545C7FD53503E5, offsetMsgId=C0A8006400002A9F000000000002BC96, messageQueue=MessageQueue [topic=TopicTest, brokerName=taomindeMacBook-Pro-2.local, queueId=1], queueOffset=249]
SendResult [sendStatus=SEND_OK, msgId=C0A80064502A355DA2545C7FD53603E6, offsetMsgId=C0A8006400002A9F000000000002BD4A, messageQueue=MessageQueue [topic=TopicTest, brokerName=taomindeMacBook-Pro-2.local, queueId=2], queueOffset=249]
到目前位置ÿ